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.
- package/.vscode/snippets.code-snippets +79 -0
- package/AGENTS.md +37 -0
- package/GG/config.js +233 -0
- package/GG/package.json +14 -0
- package/GG/static/.nojekyll +0 -0
- package/GG/static/docusaurus-snippet.css +3 -0
- package/GG/static/img/icon-bg.png +0 -0
- package/GG/static/img/icon-old.png +0 -0
- package/GG/static/img/icon.png +0 -0
- package/GG/static/img/project-blank.png +0 -0
- package/GG/static/img/social-card.jpeg +0 -0
- package/LICENSE +674 -0
- package/README.md +57 -0
- package/bin/portosaurus.js +136 -0
- package/package.json +36 -0
- package/src/config/iconMappings.js +329 -0
- package/src/config/metaTags.js +240 -0
- package/src/config/prism.js +179 -0
- package/src/config/sidebar.js +20 -0
- package/src/configLoader.js +99 -0
- package/src/index.js +79 -0
- package/src/pages/index.js +98 -0
- package/src/pages/notes.js +88 -0
- package/src/pages/tasks.js +251 -0
- package/src/theme/components/AboutSection/index.js +67 -0
- package/src/theme/components/AboutSection/styles.module.css +492 -0
- package/src/theme/components/ContactSection/index.js +87 -0
- package/src/theme/components/ContactSection/styles.module.css +327 -0
- package/src/theme/components/ExperienceSection/index.js +25 -0
- package/src/theme/components/ExperienceSection/styles.module.css +180 -0
- package/src/theme/components/HeroSection/index.js +63 -0
- package/src/theme/components/HeroSection/styles.module.css +471 -0
- package/src/theme/components/NoteIndex/index.js +119 -0
- package/src/theme/components/NoteIndex/styles.module.css +143 -0
- package/src/theme/components/ProjectsSection/index.js +529 -0
- package/src/theme/components/ProjectsSection/styles.module.css +830 -0
- package/src/theme/components/ScrollToTop/index.js +98 -0
- package/src/theme/components/ScrollToTop/styles.module.css +96 -0
- package/src/theme/components/SocialLinks/index.js +129 -0
- package/src/theme/components/SocialLinks/styles.module.css +55 -0
- package/src/theme/components/Tooltip/index.js +30 -0
- package/src/theme/components/Tooltip/styles.module.css +92 -0
- package/src/theme/css/bootstrap.css +6 -0
- package/src/theme/css/catppuccin.css +632 -0
- package/src/theme/css/custom.css +186 -0
- package/src/theme/css/tasks.css +868 -0
- package/src/theme/staticLink/.nojekyll +0 -0
- package/src/theme/staticLink/docusaurus-snippet.css +3 -0
- package/src/theme/staticLink/img/icon-bg.png +0 -0
- package/src/theme/staticLink/img/icon-old.png +0 -0
- package/src/theme/staticLink/img/icon.png +0 -0
- package/src/theme/staticLink/img/project-blank.png +0 -0
- package/src/theme/staticLink/img/social-card.jpeg +0 -0
- package/src/utils/HashNavigation.js +250 -0
- package/src/utils/appVersion.js +27 -0
- package/src/utils/cssUtils.js +99 -0
- package/src/utils/filterEnabledItems.js +21 -0
- package/src/utils/generateFavicon.js +256 -0
- package/src/utils/generateRobotsTxt.js +97 -0
- package/src/utils/iconExtractor.js +159 -0
- package/src/utils/imageDownloader.js +88 -0
- package/src/utils/imageProcessor.js +134 -0
- package/src/utils/linkShortner.js +0 -0
- 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
|
+
};
|