portosaurus 0.14.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.

Potentially problematic release.


This version of portosaurus might be problematic. Click here for more details.

Files changed (64) hide show
  1. package/.vscode/snippets.code-snippets +79 -0
  2. package/AGENTS.md +37 -0
  3. package/GG/config.js +233 -0
  4. package/GG/package.json +14 -0
  5. package/GG/static/.nojekyll +0 -0
  6. package/GG/static/docusaurus-snippet.css +3 -0
  7. package/GG/static/img/icon-bg.png +0 -0
  8. package/GG/static/img/icon-old.png +0 -0
  9. package/GG/static/img/icon.png +0 -0
  10. package/GG/static/img/project-blank.png +0 -0
  11. package/GG/static/img/social-card.jpeg +0 -0
  12. package/LICENSE +674 -0
  13. package/README.md +57 -0
  14. package/bin/portosaurus.js +136 -0
  15. package/package.json +36 -0
  16. package/src/config/iconMappings.js +329 -0
  17. package/src/config/metaTags.js +240 -0
  18. package/src/config/prism.js +179 -0
  19. package/src/config/sidebar.js +20 -0
  20. package/src/configLoader.js +99 -0
  21. package/src/index.js +79 -0
  22. package/src/pages/index.js +98 -0
  23. package/src/pages/notes.js +88 -0
  24. package/src/pages/tasks.js +251 -0
  25. package/src/theme/components/AboutSection/index.js +67 -0
  26. package/src/theme/components/AboutSection/styles.module.css +492 -0
  27. package/src/theme/components/ContactSection/index.js +87 -0
  28. package/src/theme/components/ContactSection/styles.module.css +327 -0
  29. package/src/theme/components/ExperienceSection/index.js +25 -0
  30. package/src/theme/components/ExperienceSection/styles.module.css +180 -0
  31. package/src/theme/components/HeroSection/index.js +63 -0
  32. package/src/theme/components/HeroSection/styles.module.css +471 -0
  33. package/src/theme/components/NoteIndex/index.js +119 -0
  34. package/src/theme/components/NoteIndex/styles.module.css +143 -0
  35. package/src/theme/components/ProjectsSection/index.js +529 -0
  36. package/src/theme/components/ProjectsSection/styles.module.css +830 -0
  37. package/src/theme/components/ScrollToTop/index.js +98 -0
  38. package/src/theme/components/ScrollToTop/styles.module.css +96 -0
  39. package/src/theme/components/SocialLinks/index.js +129 -0
  40. package/src/theme/components/SocialLinks/styles.module.css +55 -0
  41. package/src/theme/components/Tooltip/index.js +30 -0
  42. package/src/theme/components/Tooltip/styles.module.css +92 -0
  43. package/src/theme/css/bootstrap.css +6 -0
  44. package/src/theme/css/catppuccin.css +632 -0
  45. package/src/theme/css/custom.css +186 -0
  46. package/src/theme/css/tasks.css +868 -0
  47. package/src/theme/staticLink/.nojekyll +0 -0
  48. package/src/theme/staticLink/docusaurus-snippet.css +3 -0
  49. package/src/theme/staticLink/img/icon-bg.png +0 -0
  50. package/src/theme/staticLink/img/icon-old.png +0 -0
  51. package/src/theme/staticLink/img/icon.png +0 -0
  52. package/src/theme/staticLink/img/project-blank.png +0 -0
  53. package/src/theme/staticLink/img/social-card.jpeg +0 -0
  54. package/src/utils/HashNavigation.js +250 -0
  55. package/src/utils/appVersion.js +27 -0
  56. package/src/utils/cssUtils.js +99 -0
  57. package/src/utils/filterEnabledItems.js +21 -0
  58. package/src/utils/generateFavicon.js +256 -0
  59. package/src/utils/generateRobotsTxt.js +97 -0
  60. package/src/utils/iconExtractor.js +159 -0
  61. package/src/utils/imageDownloader.js +88 -0
  62. package/src/utils/imageProcessor.js +134 -0
  63. package/src/utils/linkShortner.js +0 -0
  64. package/src/utils/updateTitle.js +107 -0
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ <div align="center">
2
+ <img src="./static/img/icon.png" width=150>
3
+ <h1>Postosaurus</h1>
4
+ <p>Complete portfolio cum personal website solution for your digital personality.</p>
5
+ </div>
6
+
7
+ <br/>
8
+
9
+ ## 📁 Project Structure
10
+
11
+ As this project is built upon docusaurus, it follows it's guidelines.
12
+
13
+ ```
14
+ ./
15
+ ├── blog/
16
+ │ ├── ...
17
+ │ └── My mindset
18
+ ├── notes/
19
+ │ ├── ...
20
+ │ ├── sidebars.js
21
+ │ └── Self written notes, accessiable in /notes
22
+ ├── src/
23
+ │ ├── components/
24
+ │ ├── css/
25
+ │ ├── pages/
26
+ │ │ ├─ ...
27
+ │ │ ├── index.js - entry point
28
+ │ │ └── holds standalone pages
29
+ │ └── ...
30
+ ├── static/
31
+ │ ├── img/
32
+ │ ├── ...
33
+ │ └── static files
34
+ ├── config.js
35
+ ├── docusaurus.config.js
36
+ └── package.json
37
+ ```
38
+
39
+ ## 💻 Development
40
+
41
+ - Run the local development server:
42
+
43
+ ```bash
44
+ npm run start
45
+ ```
46
+
47
+ - Build the website:
48
+
49
+ ```bash
50
+ npm run build
51
+ ```
52
+
53
+ - Serve the built website locally:
54
+
55
+ ```bash
56
+ npm run serve
57
+ ```
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const { spawnSync } = require('child_process');
6
+ const { loadUserConfig } = require('../src/configLoader');
7
+
8
+ const args = process.argv.slice(2);
9
+ const command = args[0];
10
+
11
+ if (!command) {
12
+ console.log("Usage: portosaurus <init|start|build|swizzle|deploy|...>");
13
+ process.exit(1);
14
+ }
15
+
16
+ if (command === 'init') {
17
+ const targetDir = args[1];
18
+ if (!targetDir) {
19
+ console.error("Please specify a directory: portosaurus init <dir>");
20
+ process.exit(1);
21
+ }
22
+
23
+ const targetPath = path.resolve(process.cwd(), targetDir);
24
+
25
+ if (fs.existsSync(targetPath)) {
26
+ console.error(`Directory ${targetDir} already exists.`);
27
+ process.exit(1);
28
+ }
29
+
30
+ console.log(`\n🦕 Initializing Portosaurus project in ${targetDir}...\n`);
31
+
32
+ fs.mkdirSync(targetPath, { recursive: true });
33
+ fs.mkdirSync(path.join(targetPath, 'blog'), { recursive: true });
34
+ fs.mkdirSync(path.join(targetPath, 'notes'), { recursive: true });
35
+
36
+ // Create package.json
37
+ const pkgJson = {
38
+ name: path.basename(targetDir),
39
+ version: '0.0.0',
40
+ private: true,
41
+ dependencies: {
42
+ "portosaurus": "^0.14.0", // Expecting to be installed from npm/local
43
+ "react": "^18.0.0",
44
+ "react-dom": "^18.0.0"
45
+ },
46
+ scripts: {
47
+ "start": "portosaurus start",
48
+ "build": "portosaurus build"
49
+ }
50
+ };
51
+ fs.writeFileSync(path.join(targetPath, 'package.json'), JSON.stringify(pkgJson, null, 2));
52
+
53
+ // Copy config.js
54
+ const templateConfigPath = path.resolve(__dirname, '../templates/default/config.js');
55
+ if (fs.existsSync(templateConfigPath)) {
56
+ fs.copyFileSync(templateConfigPath, path.join(targetPath, 'config.js'));
57
+ } else {
58
+ // Fallback
59
+ const sampleConfig = `exports.usrConf = { hero_section: { title: "My Portfolio" } };`;
60
+ fs.writeFileSync(path.join(targetPath, 'config.js'), sampleConfig);
61
+ }
62
+
63
+ // Copy static assets
64
+ const staticTemplatePath = path.resolve(__dirname, '../src/theme/staticLink');
65
+ const targetStaticPath = path.join(targetPath, 'static');
66
+ if (fs.existsSync(staticTemplatePath)) {
67
+ // Recursive copy function or just fs.cpSync (Node 16.7+)
68
+ if (fs.cpSync) {
69
+ fs.cpSync(staticTemplatePath, targetStaticPath, { recursive: true });
70
+ } else {
71
+ // simple fallback for older nodes if needed, or just ignore for now
72
+ // Assuming Node 20+ as per package.json
73
+ }
74
+ }
75
+
76
+ console.log("✅ API Scaffolded.");
77
+ console.log(`\nNext steps:\n cd ${targetDir}\n npm install\n npm run start\n`);
78
+ return;
79
+ }
80
+
81
+ // Ensure we are in a project
82
+ if (!fs.existsSync(path.resolve(process.cwd(), 'config.js')) && !['serve'].includes(command)) {
83
+ console.warn("⚠️ config.js not found in current directory.");
84
+ }
85
+
86
+ // 1. Load User Config to get Site Metadata
87
+ const userConfig = loadUserConfig();
88
+ const usrConf = userConfig.usrConf || {};
89
+
90
+ // 2. Generate Temporary Docusaurus Config
91
+ const tempConfigPath = path.resolve(process.cwd(), '_docusaurus.config.auto.js');
92
+
93
+ const siteConfig = {
94
+ title: usrConf.hero_section?.title || 'Portosaurus',
95
+ tagline: usrConf.hero_section?.tagline || 'My Portfolio',
96
+ url: usrConf.site_url || 'https://example.com',
97
+ baseUrl: usrConf.site_path || '/',
98
+ favicon: 'img/favicon.ico', // Default
99
+ organizationName: 'soymadip', // TODO: Make configurable
100
+ projectName: 'portosaurus-site',
101
+ onBrokenLinks: 'warn',
102
+ onBrokenMarkdownLinks: 'warn',
103
+ presets: [
104
+ [
105
+ 'portosaurus', // Use our preset
106
+ {}
107
+ ]
108
+ ],
109
+ };
110
+
111
+ const configFileContent = `module.exports = ${JSON.stringify(siteConfig, null, 2)};`;
112
+ fs.writeFileSync(tempConfigPath, configFileContent);
113
+
114
+ // 3. Delegate to Docusaurus (using local node_modules)
115
+ // We assume 'docusaurus' is reachable via 'portosaurus' deps or user deps.
116
+ // Actually, since portosaurus depends on @docusaurus/core, we can find the binary.
117
+
118
+ const docusaurusBin = path.resolve(__dirname, '../node_modules/.bin/docusaurus');
119
+ const localDocusaurus = path.resolve(process.cwd(), 'node_modules/.bin/docusaurus');
120
+
121
+ // Prefer local, fall back to ours
122
+ const cmd = fs.existsSync(localDocusaurus) ? localDocusaurus : docusaurusBin;
123
+
124
+ console.log(`🦕 Running Docusaurus [${command}]...`);
125
+
126
+ const result = spawnSync(cmd, [command, '--config', '_docusaurus.config.auto.js', ...args.slice(1)], {
127
+ stdio: 'inherit',
128
+ shell: true
129
+ });
130
+
131
+ // Cleanup (optional: maybe keep for debug if failed?)
132
+ if (fs.existsSync(tempConfigPath)) {
133
+ fs.unlinkSync(tempConfigPath);
134
+ }
135
+
136
+ process.exit(result.status);
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "portosaurus",
3
+ "version": "0.14.0",
4
+ "description": "A zero-config Docusaurus preset for Portosaurus, a personal portfolio solution.",
5
+ "main": "src/index.js",
6
+ "bin": {
7
+ "portosaurus": "./bin/portosaurus.js"
8
+ },
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "scripts": {
13
+ "test": "echo \"Error: no test specified\" && exit 1"
14
+ },
15
+ "dependencies": {
16
+ "@docusaurus/core": "^3.9.2",
17
+ "@docusaurus/preset-classic": "^3.9.2",
18
+ "@easyops-cn/docusaurus-search-local": "^0.52.1",
19
+ "@mdx-js/react": "^3.0.0",
20
+ "clsx": "^2.0.0",
21
+ "favicons": "^7.2.0",
22
+ "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom",
23
+ "prism-react-renderer": "^2.3.0",
24
+ "react-icons": "^5.5.0",
25
+ "react-slick": "^0.31.0",
26
+ "sharp": "^0.34.4",
27
+ "slick-carousel": "^1.8.1"
28
+ },
29
+ "peerDependencies": {
30
+ "react": "^18.0.0",
31
+ "react-dom": "^18.0.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=20.0"
35
+ }
36
+ }
@@ -0,0 +1,329 @@
1
+ import { TbBrandCSharp, TbBrandCassandra, TbBrandVscode, TbBrandOnedrive, TbBrandAzure, TbBrandBing, TbBrandGithubCopilot } from "react-icons/tb";
2
+ import { GrVirtualMachine } from "react-icons/gr";
3
+ import { DiRasberryPi } from "react-icons/di";
4
+ import { PiGithubLogoFill, PiMicrosoftExcelLogoDuotone, PiMicrosoftOutlookLogo, PiMicrosoftPowerpointLogo, PiMicrosoftWordLogo } from "react-icons/pi";
5
+ import { BiLogoPostgresql, BiLogoWindows } from "react-icons/bi";
6
+ import { BsFiletypeXlsx, BsFiletypeDocx, BsFiletypePpt, BsMicrosoftTeams } from "react-icons/bs";
7
+ import { TiVendorMicrosoft } from "react-icons/ti";
8
+
9
+ import {
10
+ SiPython, SiJavascript, SiCplusplus, SiRust, SiGo, SiTypescript, SiReact, SiMysql, SiGnubash,
11
+ SiLinux, SiLinuxfoundation, SiArchlinux, SiAlmalinux, SiAlpinelinux, SiKalilinux, SiLinuxmint,
12
+ SiRockylinux, SiVoidlinux, SiUbuntu, SiKubuntu, SiUbuntumate, SiDebian, SiRedhat, SiGithub,
13
+ SiLinkedin, SiMastodon, SiInstagram, SiFacebook, SiYoutube, SiTwitch, SiDiscord, SiReddit,
14
+ SiStackoverflow, SiLeetcode, SiHackerrank, SiCodeforces, SiMatrix, SiGmail, SiProtonmail, SiSignal, SiReplit,
15
+ SiZoom, SiNotion, SiObsidian, SiMarkdown, SiSubstack, SiThreads, SiOpenai, SiDocker, SiPodman,
16
+ SiLinuxcontainers, SiVmware, SiXing, SiKaggle, SiCodesandbox,
17
+ SiGooglechrome, SiFirefox, SiSafari, SiBrave, SiOpera, SiTorbrowser, SiVivaldi, SiZendesk,
18
+ SiImdb, SiMyanimelist, SiAnilist, SiLetterboxd, SiCrunchyroll, SiKitsu, SiSimkl,
19
+ SiOracle, SiMongodb, SiSqlite, SiMariadb, SiInfluxdb, SiRedis, SiCouchbase, SiApachecassandra,
20
+ SiAmazondynamodb, SiFirebase, SiNeo4J, SiElasticsearch, SiGraphql, SiGoogledrive
21
+ } from 'react-icons/si';
22
+
23
+ import {
24
+ FaJava, FaEnvelope, FaRss, FaGitAlt, FaTwitter, FaTelegramPlane, FaMedium, FaPhp,
25
+ FaGlobe, FaDev, FaPinterest, FaWhatsapp, FaSlack, FaSkype, FaSnapchatGhost, FaTiktok, FaSteam,
26
+ FaGitlab, FaBitbucket, FaKeybase, FaCodepen, FaJsSquare, FaHackerNews, FaVimeoV, FaFlickr,
27
+ FaDribbble, FaBehance, FaPatreon, FaPaypal, FaEthereum, FaBitcoin, FaLaptopCode, FaCode,
28
+ FaBlogger, FaWordpress, FaHashtag, FaUserCircle, FaUserSecret, FaBug, FaRobot, FaHtml5, FaCss3Alt,
29
+ FaFedora, FaInternetExplorer, FaEdge, FaTv, FaFilm, FaVideo, FaPodcast,
30
+ FaSearch, FaCog, FaEdit, FaHome, FaInfoCircle, FaLink, FaDownload,
31
+ FaUpload, FaSave, FaTrash, FaExclamationTriangle, FaExclamationCircle, FaCheckCircle,
32
+ FaQuestionCircle, FaClock, FaComments, FaBell, FaDatabase,
33
+ FaCalendar, FaCheckSquare, FaBookmark, FaStar, FaHeart, FaClipboard, FaEnvelopeOpen,
34
+ FaMicrosoft, FaGoogleDrive
35
+ } from "react-icons/fa";
36
+
37
+
38
+
39
+ //--------- Icon mappings ---------
40
+
41
+ export const iconMap = {
42
+
43
+ // Programming languages
44
+ python: { icon: SiPython, color: '#3776AB' },
45
+ javascript: { icon: SiJavascript, color: '#F7DF1E' },
46
+ jssquare: { icon: FaJsSquare, color: '#F7DF1E' },
47
+ typescript: { icon: SiTypescript, color: '#3178C6' },
48
+ cpp: { icon: SiCplusplus, color: '#00599C' },
49
+ csharp: { icon: TbBrandCSharp, color: '#239120' },
50
+ rust: { icon: SiRust, color: '#ffffff' },
51
+ go: { icon: SiGo, color: '#00ADD8' },
52
+ java: { icon: FaJava, color: '#007396' },
53
+ php: { icon: FaPhp, color: '#777BB4' },
54
+ html: { icon: FaHtml5, color: '#E34F26' },
55
+ css: { icon: FaCss3Alt, color: '#1572B6' },
56
+ sql: { icon: SiMysql, color: '#4479A1' },
57
+ postgresql: { icon: BiLogoPostgresql, color: '#336791' },
58
+ postgres: { icon: BiLogoPostgresql, color: '#336791' },
59
+ oraclesql: { icon: SiOracle, color: '#F80000' },
60
+ oracle: { icon: SiOracle, color: '#F80000' },
61
+ database: { icon: FaDatabase, color: '#47A248' },
62
+ db: { icon: FaDatabase, color: '#47A248' },
63
+ dbms: { icon: FaDatabase, color: '#47A248' },
64
+ mysql: { icon: SiMysql, color: '#4479A1' },
65
+ mariadb: { icon: SiMariadb, color: '#003545' },
66
+ sqlite: { icon: SiSqlite, color: '#003B57' },
67
+ mongodb: { icon: SiMongodb, color: '#47A248' },
68
+ mongo: { icon: SiMongodb, color: '#47A248' },
69
+ nosql: { icon: SiMongodb, color: '#47A248' },
70
+ redis: { icon: SiRedis, color: '#DC382D' },
71
+ couchbase: { icon: SiCouchbase, color: '#EA2328' },
72
+ cassandra: { icon: SiApachecassandra, color: '#1287B1' },
73
+ dynamodb: { icon: SiAmazondynamodb, color: '#4053D6' },
74
+ firebase: { icon: SiFirebase, color: '#FFCA28' },
75
+ firestore: { icon: SiFirebase, color: '#FFCA28' },
76
+ mssql: { icon: FaDatabase, color: '#CC2927' },
77
+ sqlserver: { icon: FaDatabase, color: '#CC2927' },
78
+ microsoftsqlserver: { icon: FaDatabase, color: '#CC2927' },
79
+ neo4j: { icon: SiNeo4J, color: '#008CC1' },
80
+ graphdb: { icon: SiNeo4J, color: '#008CC1' },
81
+ elasticsearch: { icon: SiElasticsearch, color: '#005571' },
82
+ graphql: { icon: SiGraphql, color: '#E10098' },
83
+ influxdb: { icon: SiInfluxdb, color: '#22ADF6' },
84
+ timeseries: { icon: SiInfluxdb, color: '#22ADF6' },
85
+
86
+ // Competitive programming platforms
87
+ leetcode: { icon: SiLeetcode, color: '#FFA116' },
88
+ hackerrank: { icon: SiHackerrank, color: '#2EC866' },
89
+ codeforces: { icon: SiCodeforces, color: '#1F8ACB' },
90
+ replit: { icon: SiReplit, color: '#FA5302' },
91
+
92
+
93
+
94
+
95
+
96
+ // Operating systems and containers
97
+ linux: { icon: SiLinux, color: '#FCC624' },
98
+ linuxfoundation: { icon: SiLinuxfoundation, color: '#000000' },
99
+ arch: { icon: SiArchlinux, color: '#1793D1' },
100
+ archlinux: { icon: SiArchlinux, color: '#1793D1' },
101
+ ubuntu: { icon: SiUbuntu, color: '#E95420' },
102
+ kubuntu: { icon: SiKubuntu, color: '#0078D6' },
103
+ ubuntumate: { icon: SiUbuntumate, color: '#2C001E' },
104
+ debian: { icon: SiDebian, color: '#A80030' },
105
+ redhat: { icon: SiRedhat, color: '#EE0000' },
106
+ fedora: { icon: FaFedora, color: '#294172' },
107
+ kalilinux: { icon: SiKalilinux, color: '#557C94' },
108
+ linuxmint: { icon: SiLinuxmint, color: '#87CF3E' },
109
+ voidlinux: { icon: SiVoidlinux, color: '#8BC1A2' },
110
+ alpinelinux: { icon: SiAlpinelinux, color: '#0D597F' },
111
+ alpine: { icon: SiAlpinelinux, color: '#0D597F' },
112
+ almalinux: { icon: SiAlmalinux, color: '#1793D1' },
113
+ rockylinux: { icon: SiRockylinux, color: '#000000' },
114
+ raspberry: { icon: DiRasberryPi, color: '#C51A4A' },
115
+ raspberryPi: { icon: DiRasberryPi, color: '#C51A4A' },
116
+ raspberrypi: { icon: DiRasberryPi, color: '#C51A4A' },
117
+ raspberryPiZero: { icon: DiRasberryPi, color: '#C51A4A' },
118
+ raspian: { icon: DiRasberryPi, color: '#C51A4A' },
119
+ docker: { icon: SiDocker, color: '#2496ED' },
120
+ podman: { icon: SiPodman, color: '#2496ED' },
121
+ container: { icon: SiLinuxcontainers, color: '#2496ED' },
122
+ containers: { icon: SiLinuxcontainers, color: '#2496ED' },
123
+ linuxcontainers: { icon: SiLinuxcontainers, color: '#2496ED' },
124
+ vm: { icon: GrVirtualMachine, color: '#000000' },
125
+ vmware: { icon: SiVmware, color: '#F3801D' },
126
+
127
+
128
+ // Shells and tools
129
+ shell: { icon: SiGnubash, color: '#4EAA25' },
130
+ bash: { icon: SiGnubash, color: '#4EAA25' },
131
+ react: { icon: SiReact, color: '#61DAFB' },
132
+
133
+
134
+ // Social platforms
135
+ github: { icon: SiGithub, color: '#585b70' },
136
+ githubalt: { icon: PiGithubLogoFill, color: '#585b70' },
137
+ git: { icon: FaGitAlt, color: '#F05032' },
138
+ gitlab: { icon: FaGitlab, color: '#FC6D26' },
139
+ bitbucket: { icon: FaBitbucket, color: '#0052CC' },
140
+ linkedin: { icon: SiLinkedin, color: '#0A66C2' },
141
+ twitter: { icon: FaTwitter, color: '#1DA1F2' },
142
+ x: { icon: FaTwitter, color: '#1DA1F2' },
143
+ mastodon: { icon: SiMastodon, color: '#6364FF' },
144
+ instagram: { icon: SiInstagram, color: '#E4405F' },
145
+ insta: { icon: SiInstagram, color: '#E4405F' },
146
+ facebook: { icon: SiFacebook, color: '#1877F2' },
147
+ fb: { icon: SiFacebook, color: '#1877F2' },
148
+ youtube: { icon: SiYoutube, color: '#FF0000' },
149
+ yt: { icon: SiYoutube, color: '#FF0000' },
150
+ twitch: { icon: SiTwitch, color: '#9146FF' },
151
+ discord: { icon: SiDiscord, color: '#5865F2' },
152
+ discordapp: { icon: SiDiscord, color: '#5865F2' },
153
+ reddit: { icon: SiReddit, color: '#FF4500' },
154
+ stackoverflow: { icon: SiStackoverflow, color: '#F58025' },
155
+ pinterest: { icon: FaPinterest, color: '#E60023' },
156
+ snapchat: { icon: FaSnapchatGhost, color: '#FFFC00' },
157
+ tiktok: { icon: FaTiktok, color: '#000000' },
158
+ threads: { icon: SiThreads, color: '#000000' },
159
+
160
+
161
+ // Utility icons
162
+ note: { icon: SiObsidian, color: '#7C3AED' },
163
+ notes: { icon: SiObsidian, color: '#7C3AED' },
164
+ document: { icon: SiNotion, color: '#000000' },
165
+ docs: { icon: SiNotion, color: '#000000' },
166
+ calendar: { icon: FaCalendar, color: '#4285F4' },
167
+ task: { icon: FaCheckSquare, color: '#00BCD4' },
168
+ todo: { icon: FaCheckSquare, color: '#00BCD4' },
169
+ bookmark: { icon: FaBookmark, color: '#FFC107' },
170
+ star: { icon: FaStar, color: '#FFC107' },
171
+ favorite: { icon: FaHeart, color: '#E91E63' },
172
+ clipboard: { icon: FaClipboard, color: '#795548' },
173
+ search: { icon: FaSearch, color: '#607D8B' },
174
+ settings: { icon: FaCog, color: '#546E7A' },
175
+ config: { icon: FaCog, color: '#546E7A' },
176
+ edit: { icon: FaEdit, color: '#2196F3' },
177
+ home: { icon: FaHome, color: '#8BC34A' },
178
+ info: { icon: FaInfoCircle, color: '#2196F3' },
179
+ link: { icon: FaLink, color: '#9C27B0' },
180
+ url: { icon: FaLink, color: '#9C27B0' },
181
+ download: { icon: FaDownload, color: '#00BCD4' },
182
+ upload: { icon: FaUpload, color: '#FF9800' },
183
+ save: { icon: FaSave, color: '#4CAF50' },
184
+ delete: { icon: FaTrash, color: '#F44336' },
185
+ remove: { icon: FaTrash, color: '#F44336' },
186
+ warning: { icon: FaExclamationTriangle, color: '#FF9800' },
187
+ error: { icon: FaExclamationCircle, color: '#F44336' },
188
+ success: { icon: FaCheckCircle, color: '#4CAF50' },
189
+ help: { icon: FaQuestionCircle, color: '#2196F3' },
190
+ time: { icon: FaClock, color: '#607D8B' },
191
+ clock: { icon: FaClock, color: '#607D8B' },
192
+ chat: { icon: FaComments, color: '#03A9F4' },
193
+ message: { icon: FaEnvelopeOpen, color: '#03A9F4' },
194
+ notification: { icon: FaBell, color: '#FF9800' },
195
+ alert: { icon: FaBell, color: '#FF9800' },
196
+
197
+ // Messaging platforms
198
+ telegram: { icon: FaTelegramPlane, color: '#26A5E4' },
199
+ tg: { icon: FaTelegramPlane, color: '#26A5E4' },
200
+ whatsapp: { icon: FaWhatsapp, color: '#25D366' },
201
+ wp: { icon: FaWhatsapp, color: '#25D366' },
202
+ slack: { icon: FaSlack, color: '#4A154B' },
203
+ skype: { icon: FaSkype, color: '#00AFF0' },
204
+ matrix: { icon: SiMatrix, color: '#000000' },
205
+ signal: { icon: SiSignal, color: '#3A76F0' },
206
+ zoom: { icon: SiZoom, color: '#2D8CFF' },
207
+
208
+
209
+ // Email platforms
210
+ email: { icon: FaEnvelope, color: '#EA4335' },
211
+ mail: { icon: FaEnvelope, color: '#EA4335' },
212
+ contact: { icon: FaEnvelope, color: '#EA4335' },
213
+ gmail: { icon: SiGmail, color: '#EA4335' },
214
+ protonmail: { icon: SiProtonmail, color: '#8B89CC' },
215
+
216
+
217
+ // Blog/writing platforms
218
+ medium: { icon: FaMedium, color: '#000000' },
219
+ blog: { icon: FaBlogger, color: '#FF5722' },
220
+ wordpress: { icon: FaWordpress, color: '#21759B' },
221
+ substack: { icon: SiSubstack, color: '#FF6719' },
222
+ dev: { icon: FaDev, color: '#0A0A0A' },
223
+ rss: { icon: FaRss, color: '#FFA500' },
224
+
225
+
226
+ // Creative platforms
227
+ dribbble: { icon: FaDribbble, color: '#EA4C89' },
228
+ behance: { icon: FaBehance, color: '#1769FF' },
229
+ flickr: { icon: FaFlickr, color: '#0063DC' },
230
+ vimeo: { icon: FaVimeoV, color: '#1AB7EA' },
231
+
232
+
233
+ // Payment/donation
234
+ patreon: { icon: FaPatreon, color: '#F96854' },
235
+ paypal: { icon: FaPaypal, color: '#00457C' },
236
+ ethereum: { icon: FaEthereum, color: '#3C3C3D' },
237
+ bitcoin: { icon: FaBitcoin, color: '#F7931A' },
238
+
239
+
240
+ // Professional
241
+ xing: { icon: SiXing, color: '#006567' },
242
+ kaggle: { icon: SiKaggle, color: '#20BEFF' },
243
+
244
+
245
+ // Knowledge/note-taking
246
+ notion: { icon: SiNotion, color: '#000000' },
247
+ obsidian: { icon: SiObsidian, color: '#7C3AED' },
248
+ markdown: { icon: SiMarkdown, color: '#000000' },
249
+
250
+
251
+ // Misc
252
+ hackernews: { icon: FaHackerNews, color: '#FF6600' },
253
+ hn: { icon: FaHackerNews, color: '#FF6600' },
254
+ keybase: { icon: FaKeybase, color: '#33A0FF' },
255
+ openai: { icon: SiOpenai, color: '#412991' },
256
+ code: { icon: FaCode, color: '#007ACC' },
257
+ programming: { icon: FaLaptopCode, color: '#333333' },
258
+ user: { icon: FaUserCircle, color: '#4285F4' },
259
+ anonymous: { icon: FaUserSecret, color: '#666666' },
260
+ debug: { icon: FaBug, color: '#E91E63' },
261
+ bot: { icon: FaRobot, color: '#00BCD4' },
262
+ steam: { icon: FaSteam, color: '#000000' },
263
+ hashtag: { icon: FaHashtag, color: '#ffffff' },
264
+ codesandbox: { icon: SiCodesandbox, color: '#151515' },
265
+ codepen: { icon: FaCodepen, color: '#000000' },
266
+ website: { icon: FaGlobe, color: '#4285F4' },
267
+ web: { icon: FaGlobe, color: '#4285F4' },
268
+
269
+ // Content and anime tracking
270
+ imdb: { icon: SiImdb, color: '#F5C518' },
271
+ tvdb: { icon: FaTv, color: '#4BB7AA' },
272
+ themoviedb: { icon: FaFilm, color: '#01B4E4' },
273
+ tmdb: { icon: FaFilm, color: '#01B4E4' },
274
+ myanimelist: { icon: SiMyanimelist, color: '#2E51A2' },
275
+ mal: { icon: SiMyanimelist, color: '#2E51A2' },
276
+ anilist: { icon: SiAnilist, color: '#02A9FF' },
277
+ simkl: { icon: SiSimkl, color: '#ffffff' },
278
+ letterboxd: { icon: SiLetterboxd, color: '#00A13D' },
279
+ trakt: { icon: FaVideo, color: '#ED1C24' },
280
+ crunchyroll: { icon: SiCrunchyroll, color: '#F78B24' },
281
+ kitsu: { icon: SiKitsu, color: '#F75239' },
282
+ animenewsnetwork: { icon: FaPodcast, color: '#AA0000' },
283
+ ann: { icon: FaPodcast, color: '#AA0000' },
284
+
285
+ // Browsers
286
+ chrome: { icon: SiGooglechrome, color: '#4285F4' },
287
+ googlechrome: { icon: SiGooglechrome, color: '#4285F4' },
288
+ firefox: { icon: SiFirefox, color: '#FF7139' },
289
+ safari: { icon: SiSafari, color: '#000000' },
290
+ edge: { icon: FaEdge, color: '#0078D7' },
291
+ microsoftedge: { icon: FaEdge, color: '#0078D7' },
292
+ brave: { icon: SiBrave, color: '#FB542B' },
293
+ opera: { icon: SiOpera, color: '#FF1B2D' },
294
+ tor: { icon: SiTorbrowser, color: '#7D4698' },
295
+ torbrowser: { icon: SiTorbrowser, color: '#7D4698' },
296
+ vivaldi: { icon: SiVivaldi, color: '#EF3939' },
297
+ ie: { icon: FaInternetExplorer, color: '#0076D6' },
298
+ internetexplorer: { icon: FaInternetExplorer, color: '#0076D6' },
299
+ "zen-browser": { icon: SiZendesk, color: '#00363D' },
300
+ zenbrowser: { icon: SiZendesk, color: '#00363D' },
301
+ zen: { icon: SiZendesk, color: '#00363D' },
302
+
303
+ // Microsoft
304
+ windows: { icon: BiLogoWindows, color: '#0078D6' },
305
+ windows10: { icon: TiVendorMicrosoft, color: '#F25022' },
306
+ microsoft: { icon: FaMicrosoft, color: '#F25022' },
307
+ office: { icon: TiVendorMicrosoft, color: '#D83B01' },
308
+ excel: { icon: PiMicrosoftExcelLogoDuotone, color: '#217346' },
309
+ excelduotone: { icon: PiMicrosoftExcelLogoDuotone, color: '#217346' },
310
+ word: { icon: PiMicrosoftWordLogo, color: '#2B579A' },
311
+ powerpoint: { icon: PiMicrosoftPowerpointLogo, color: '#D83B01' },
312
+ powerpointlogo: { icon: PiMicrosoftPowerpointLogo, color: '#D83B01' },
313
+ teams: { icon: BsMicrosoftTeams, color: '#6264A7' },
314
+ teamsalt: { icon: BsMicrosoftTeams, color: '#6264A7' },
315
+ onedrive: { icon: TbBrandOnedrive, color: '#0078D4' },
316
+ azure: { icon: TbBrandAzure, color: '#0089D6' },
317
+ bing: { icon: TbBrandBing, color: '#008373' },
318
+ vscode: { icon: TbBrandVscode, color: '#007ACC' },
319
+ outlook: { icon: PiMicrosoftOutlookLogo, color: '#0078D4' },
320
+ fileword: { icon: BsFiletypeDocx, color: '#2B579A' },
321
+ fileexcel: { icon: BsFiletypeXlsx, color: '#217346' },
322
+ filepowerpoint: { icon: BsFiletypePpt, color: '#D83B01' },
323
+ githubcopilot: { icon: TbBrandGithubCopilot, color: '#000000' },
324
+
325
+ // Google products
326
+ googledrive: { icon: FaGoogleDrive, color: '#0F9D58' },
327
+ gdrive: { icon: SiGoogledrive, color: '#0F9D58' }
328
+
329
+ };