portosaurus 1.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.
Files changed (57) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +116 -0
  3. package/bin/portosaurus.js +337 -0
  4. package/internal/notes/index.md +10 -0
  5. package/internal/sidebars.js +20 -0
  6. package/internal/src/components/AboutSection/index.js +67 -0
  7. package/internal/src/components/AboutSection/styles.module.css +492 -0
  8. package/internal/src/components/ContactSection/index.js +94 -0
  9. package/internal/src/components/ContactSection/styles.module.css +327 -0
  10. package/internal/src/components/ExperienceSection/index.js +25 -0
  11. package/internal/src/components/ExperienceSection/styles.module.css +180 -0
  12. package/internal/src/components/HeroSection/index.js +61 -0
  13. package/internal/src/components/HeroSection/styles.module.css +471 -0
  14. package/internal/src/components/NoteIndex/index.js +127 -0
  15. package/internal/src/components/NoteIndex/styles.module.css +143 -0
  16. package/internal/src/components/ProjectsSection/index.js +529 -0
  17. package/internal/src/components/ProjectsSection/styles.module.css +830 -0
  18. package/internal/src/components/ScrollToTop/index.js +98 -0
  19. package/internal/src/components/ScrollToTop/styles.module.css +96 -0
  20. package/internal/src/components/SocialLinks/index.js +129 -0
  21. package/internal/src/components/SocialLinks/styles.module.css +55 -0
  22. package/internal/src/components/Tooltip/index.js +30 -0
  23. package/internal/src/components/Tooltip/styles.module.css +92 -0
  24. package/internal/src/config/iconMappings.js +329 -0
  25. package/internal/src/config/metaTags.js +240 -0
  26. package/internal/src/config/prism.js +179 -0
  27. package/internal/src/config/sidebar.js +20 -0
  28. package/internal/src/css/bootstrap.css +6 -0
  29. package/internal/src/css/catppuccin.css +632 -0
  30. package/internal/src/css/custom.css +186 -0
  31. package/internal/src/css/tasks.css +868 -0
  32. package/internal/src/pages/index.js +98 -0
  33. package/internal/src/pages/notes.js +88 -0
  34. package/internal/src/pages/tasks.js +310 -0
  35. package/internal/src/utils/HashNavigation.js +250 -0
  36. package/internal/src/utils/appVersion.js +27 -0
  37. package/internal/src/utils/compileConfig.js +82 -0
  38. package/internal/src/utils/cssUtils.js +99 -0
  39. package/internal/src/utils/filterEnabledItems.js +21 -0
  40. package/internal/src/utils/generateFavicon.js +256 -0
  41. package/internal/src/utils/generateRobotsTxt.js +97 -0
  42. package/internal/src/utils/iconExtractor.js +159 -0
  43. package/internal/src/utils/imageDownloader.js +88 -0
  44. package/internal/src/utils/imageProcessor.js +134 -0
  45. package/internal/src/utils/linkShortner.js +0 -0
  46. package/internal/src/utils/updateTitle.js +107 -0
  47. package/package.json +51 -0
  48. package/template/.github/workflows/deploy.yml +57 -0
  49. package/template/README.md +70 -0
  50. package/template/blog/authors.yml +5 -0
  51. package/template/blog/welcome.md +10 -0
  52. package/template/config.js +233 -0
  53. package/template/notes/getting-started.md +7 -0
  54. package/template/static/README.md +33 -0
  55. package/utils/createConfig.js +227 -0
  56. package/utils/logger.js +19 -0
  57. package/utils/packageManager.js +88 -0
@@ -0,0 +1,134 @@
1
+ const sharp = require('sharp');
2
+
3
+ // AI GENERATED
4
+
5
+ /**
6
+ * Reshapes an image to various predefined shapes
7
+ *
8
+ * @param {string} imagePath - Path to the input image
9
+ * @param {string} outputPath - Path to save the processed image
10
+ * @param {string} [shape='circle'] - Shape to apply ('circle', 'square', 'rounded', 'hexagon', 'shield')
11
+ * @param {number} [roundedCornerRadius=50] - Corner radius for rounded shape (percentage)
12
+ * @returns {Promise<string>} - A promise that resolves with the path to the processed image
13
+ */
14
+ async function reshapeImage(imagePath, outputPath, shape = 'circle', roundedCornerRadius = 50) {
15
+ console.log(`[INFO] Processing image to ${shape} shape...`);
16
+
17
+ try {
18
+ // Get image dimensions
19
+ const metadata = await sharp(imagePath).metadata();
20
+ const size = Math.min(metadata.width, metadata.height);
21
+
22
+ let shapeMask;
23
+
24
+ switch (shape.toLowerCase()) {
25
+ case 'circle':
26
+ shapeMask = Buffer.from(
27
+ `<svg><circle cx="${size/2}" cy="${size/2}" r="${size/2}" fill="white"/></svg>`
28
+ );
29
+ break;
30
+
31
+ case 'square':
32
+ // No mask needed for square, just resize to equal width/height
33
+ await sharp(imagePath)
34
+ .resize(size, size, { fit: 'cover' })
35
+ .toFile(outputPath);
36
+ return outputPath;
37
+
38
+ case 'rounded':
39
+ // Convert percentage to actual pixels (e.g., 50% becomes size/4)
40
+ const radius = Math.min(100, Math.max(0, roundedCornerRadius)) * size / 200;
41
+ shapeMask = Buffer.from(
42
+ `<svg><rect x="0" y="0" width="${size}" height="${size}" rx="${radius}" ry="${radius}" fill="white"/></svg>`
43
+ );
44
+ break;
45
+
46
+ case 'hexagon':
47
+ // Calculate hexagon points
48
+ const centerX = size / 2;
49
+ const centerY = size / 2;
50
+ const hexRadius = size / 2;
51
+ let points = '';
52
+ for (let i = 0; i < 6; i++) {
53
+ const angleDeg = 60 * i - 30;
54
+ const angleRad = Math.PI / 180 * angleDeg;
55
+ const x = centerX + hexRadius * Math.cos(angleRad);
56
+ const y = centerY + hexRadius * Math.sin(angleRad);
57
+ points += `${x},${y} `;
58
+ }
59
+ shapeMask = Buffer.from(
60
+ `<svg><polygon points="${points}" fill="white"/></svg>`
61
+ );
62
+ break;
63
+
64
+ case 'shield':
65
+ const shieldWidth = size;
66
+ const shieldHeight = size;
67
+ const bottomCurve = size / 3;
68
+ shapeMask = Buffer.from(
69
+ `<svg>
70
+ <path d="M ${shieldWidth/2},0
71
+ L ${shieldWidth},${shieldHeight/3}
72
+ C ${shieldWidth},${shieldHeight-bottomCurve} ${shieldWidth/2},${shieldHeight} ${shieldWidth/2},${shieldHeight}
73
+ C ${shieldWidth/2},${shieldHeight} 0,${shieldHeight-bottomCurve} 0,${shieldHeight/3}
74
+ L ${shieldWidth/2},0 Z"
75
+ fill="white"/>
76
+ </svg>`
77
+ );
78
+ break;
79
+
80
+ default:
81
+ // Default to circle if shape is not recognized
82
+ console.warn(`Shape "${shape}" not recognized, defaulting to circle`);
83
+ shapeMask = Buffer.from(
84
+ `<svg><circle cx="${size/2}" cy="${size/2}" r="${size/2}" fill="white"/></svg>`
85
+ );
86
+ }
87
+
88
+ // Apply the mask and save the final image
89
+ await sharp(imagePath)
90
+ .resize(size, size, { fit: 'cover' })
91
+ .composite([
92
+ {
93
+ input: shapeMask,
94
+ blend: 'dest-in'
95
+ }
96
+ ])
97
+ .png()
98
+ .toFile(outputPath);
99
+
100
+ return outputPath;
101
+ } catch (error) {
102
+ console.error(`Error reshaping image to ${shape}:`, error);
103
+ throw error;
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Resizes an image while maintaining aspect ratio
109
+ *
110
+ * @param {string} imagePath - Path to the input image
111
+ * @param {string} outputPath - Path to save the processed image
112
+ * @param {number} maxWidth - Maximum width of the output image
113
+ * @param {number} maxHeight - Maximum height of the output image
114
+ * @returns {Promise<string>} - A promise that resolves with the path to the processed image
115
+ */
116
+ async function resizeImage(imagePath, outputPath, maxWidth, maxHeight) {
117
+ console.log(`Resizing image to max ${maxWidth}x${maxHeight}...`);
118
+
119
+ await sharp(imagePath)
120
+ .resize(maxWidth, maxHeight, {
121
+ fit: 'inside',
122
+ withoutEnlargement: true
123
+ })
124
+ .toFile(outputPath);
125
+
126
+ return outputPath;
127
+ }
128
+
129
+
130
+
131
+ module.exports = {
132
+ reshapeImage,
133
+ resizeImage,
134
+ };
File without changes
@@ -0,0 +1,107 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { useLocation } from '@docusaurus/router';
3
+ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
4
+
5
+ // AI Generated
6
+
7
+ /**
8
+ * UpdateTitle component that changes the page title based on the section in view
9
+ * @param {Object} props - Component props
10
+ * @param {Object} props.sections - Map of section IDs to their corresponding titles
11
+ * @param {string} props.defaultTitle - Default title to use when no section is prominently visible
12
+ * @param {boolean} props.enabled - Whether the dynamic title functionality is enabled
13
+ * @returns {null} This component doesn't render anything visible
14
+ */
15
+
16
+
17
+ export default function UpdateTitle({
18
+ sections = {},
19
+ defaultTitle = null,
20
+ enabled = true
21
+ }) {
22
+ const location = useLocation();
23
+ const { siteConfig } = useDocusaurusContext();
24
+ const [currentTitle, setCurrentTitle] = useState(null);
25
+
26
+ // Use the provided default title or fall back to site title
27
+ const effectiveDefaultTitle = defaultTitle || siteConfig.title;
28
+
29
+ useEffect(() => {
30
+
31
+ // Only run if enabled
32
+ if (!enabled) return;
33
+
34
+ // Use provided sections or default to empty object
35
+ const sectionTitles = Object.keys(sections).length > 0
36
+ ? sections
37
+ : {};
38
+
39
+ const updateTitle = () => {
40
+ // Get all sections we want to track
41
+ const sectionsToTrack = Object.keys(sectionTitles)
42
+ .map(id => document.getElementById(id))
43
+ .filter(Boolean);
44
+
45
+ if (sectionsToTrack.length === 0) {
46
+ // No sections found, use default title
47
+ setCurrentTitle(effectiveDefaultTitle);
48
+ return;
49
+ }
50
+
51
+ // Calculate which section is most visible
52
+ const viewportHeight = window.innerHeight;
53
+ let maxVisibleSection = null;
54
+ let maxVisibleArea = 0;
55
+
56
+ sectionsToTrack.forEach(section => {
57
+ const rect = section.getBoundingClientRect();
58
+ const visibleTop = Math.max(0, rect.top);
59
+ const visibleBottom = Math.min(viewportHeight, rect.bottom);
60
+ const visibleArea = Math.max(0, visibleBottom - visibleTop);
61
+
62
+ if (visibleArea > maxVisibleArea) {
63
+ maxVisibleArea = visibleArea;
64
+ maxVisibleSection = section.id;
65
+ }
66
+ });
67
+
68
+ // Update title state based on visible section
69
+ if (maxVisibleSection && sectionTitles[maxVisibleSection]) {
70
+ setCurrentTitle(sectionTitles[maxVisibleSection]);
71
+ } else {
72
+ setCurrentTitle(effectiveDefaultTitle);
73
+ }
74
+ };
75
+
76
+ // Add scroll event listener with throttling
77
+ let isScrolling = false;
78
+ const handleScroll = () => {
79
+ if (!isScrolling) {
80
+ window.requestAnimationFrame(() => {
81
+ updateTitle();
82
+ isScrolling = false;
83
+ });
84
+ isScrolling = true;
85
+ }
86
+ };
87
+
88
+ window.addEventListener('scroll', handleScroll);
89
+
90
+ // Initial call
91
+ updateTitle();
92
+
93
+ // Clean up
94
+ return () => {
95
+ window.removeEventListener('scroll', handleScroll);
96
+ };
97
+ }, [location.pathname, sections, effectiveDefaultTitle, enabled]);
98
+
99
+ useEffect(() => {
100
+ if (currentTitle) {
101
+ document.title = currentTitle;
102
+ }
103
+ }, [currentTitle]);
104
+
105
+ // Component doesn't render anything visible
106
+ return null;
107
+ }
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "portosaurus",
3
+ "version": "1.14.0",
4
+ "author": "soymadip",
5
+ "license": "GPL-3.0-only",
6
+ "description": "Complete portfolio cum personal website solution for your digital personality.",
7
+ "homepage": "https://github.com/soymadip/portosaurus#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/soymadip/portosaurus.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/soymadip/portosaurus/issues"
14
+ },
15
+ "keywords": [
16
+ "portfolio",
17
+ "docusaurus",
18
+ "cli",
19
+ "static-site-generator",
20
+ "documentation",
21
+ "blog"
22
+ ],
23
+ "type": "module",
24
+ "bin": {
25
+ "portosaurus": "bin/portosaurus.js"
26
+ },
27
+ "files": [
28
+ "bin/",
29
+ "internal/",
30
+ "template/",
31
+ "utils/"
32
+ ],
33
+ "dependencies": {
34
+ "@docusaurus/core": "^3.9.2",
35
+ "@docusaurus/preset-classic": "^3.9.2",
36
+ "chalk": "^5.6.2",
37
+ "commander": "^12.1.0",
38
+ "fs-extra": "^11.3.3",
39
+ "prompts": "^2.4.2",
40
+ "react": "^18.3.1",
41
+ "react-dom": "^18.3.1",
42
+ "react-icons": "^5.4.0",
43
+ "react-slick": "^0.30.2",
44
+ "slick-carousel": "^1.8.1",
45
+ "clsx": "^2.1.1",
46
+ "prism-react-renderer": "^2.4.1",
47
+ "favicons": "^7.2.0",
48
+ "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom",
49
+ "@easyops-cn/docusaurus-search-local": "^0.52.1"
50
+ }
51
+ }
@@ -0,0 +1,57 @@
1
+ name: Deploy to GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: pages
15
+ cancel-in-progress: false
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@v4
23
+
24
+ - name: Setup Bun
25
+ uses: oven-sh/setup-bun@v2
26
+ with:
27
+ bun-version: latest
28
+
29
+ - name: Cache Bun dependencies
30
+ uses: actions/cache@v4
31
+ with:
32
+ path: ~/.bun/install/cache
33
+ key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
34
+ restore-keys: |
35
+ ${{ runner.os }}-bun-
36
+
37
+ - name: Install dependencies
38
+ run: bun install
39
+
40
+ - name: Build site
41
+ run: bun run build
42
+
43
+ - name: Upload artifact
44
+ uses: actions/upload-pages-artifact@v3
45
+ with:
46
+ path: build/
47
+
48
+ deploy:
49
+ needs: build
50
+ runs-on: ubuntu-latest
51
+ environment:
52
+ name: github-pages
53
+ url: ${{ steps.deployment.outputs.page_url }}
54
+ steps:
55
+ - name: Deploy to GitHub Pages
56
+ id: deployment
57
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,70 @@
1
+ # Portosaurus Project
2
+
3
+ A portfolio website built with [Portosaurus](https://github.com/soymadip/portosaurus).
4
+
5
+ ## Getting Started
6
+
7
+ ### Development
8
+
9
+ Start the development server:
10
+
11
+ ```bash
12
+ # With Bun
13
+ bun run start
14
+
15
+ # With npm
16
+ npm run start
17
+ ```
18
+
19
+ The site will be available at `http://localhost:3000`.
20
+
21
+ ### Build
22
+
23
+ Build the static site:
24
+
25
+ ```bash
26
+ # With Bun
27
+ bun run build
28
+
29
+ # With npm
30
+ npm run build
31
+ ```
32
+
33
+ The output will be in the `build/` directory.
34
+
35
+ ## Project Structure
36
+
37
+ ```
38
+ .
39
+ ├── config.js # Site configuration
40
+ ├── blog/ # Blog posts (Markdown)
41
+ ├── notes/ # Documentation (Markdown)
42
+ ├── static/ # Static assets (images, files)
43
+ └── package.json # Dependencies
44
+ ```
45
+
46
+ ## Configuration
47
+
48
+ Edit `config.js` to customize your site. See the [Portosaurus documentation](https://github.com/soymadip/portosaurus) for all available options.
49
+
50
+ ## Deployment
51
+
52
+ ### GitHub Pages
53
+
54
+ 1. Push your project to GitHub
55
+ 2. Go to Settings > Pages
56
+ 3. Set Source to "GitHub Actions"
57
+ 4. The site will deploy automatically on push
58
+
59
+ ### Other Platforms
60
+
61
+ The `build/` directory contains a static site that can be deployed to:
62
+
63
+ - Vercel
64
+ - Netlify
65
+ - Cloudflare Pages
66
+ - Any static hosting service
67
+
68
+ ---
69
+
70
+ Made with [Portosaurus](https://github.com/soymadip/portosaurus)
@@ -0,0 +1,5 @@
1
+ soymadip:
2
+ name: soymadip
3
+ title: Maintainer
4
+ url: https://github.com/soymadip
5
+ image_url: https://github.com/soymadip.png
@@ -0,0 +1,10 @@
1
+ ---
2
+ slug: welcome
3
+ title: Welcome
4
+ authors: [soymadip]
5
+ tags: [hello, portosaurus]
6
+ ---
7
+
8
+ Welcome to your new Portosaurus blog!
9
+
10
+ This is a sample blog post.
@@ -0,0 +1,233 @@
1
+ exports.usrConf = {
2
+
3
+ auto_update: true,
4
+
5
+ dark_mode: true,
6
+
7
+ site_url: "auto",
8
+ site_path: "auto",
9
+
10
+ srt_url: "${site_url}${site_path}/l",
11
+
12
+ rebots_txt: true,
13
+ social_card: "img/social-card.jpeg",
14
+ colapsable_sidebar: true,
15
+ hide_navbar_on_scroll: true,
16
+ disable_theme_switch: false,
17
+ rss: true,
18
+
19
+ hero_section: {
20
+ title: "Your Name",
21
+ profession: "Your Profession",
22
+ description: "Short description about you, your passion, your goals etc.",
23
+ profile_pic: "https://raw.githubusercontent.com/soymadip/portosaurus/refs/heads/compiler/static/img/icon.png",
24
+ },
25
+
26
+ about_me: {
27
+ enable: true,
28
+
29
+ image: "${hero_section.profile_pic}",
30
+
31
+ description: [
32
+ "I'm a passionate FOSS developer with expertise in designing and building solutions for real-world problems.",
33
+ "My journey in software development started with a simple desire to automate repetitive tasks, specially in my PC.",
34
+ ],
35
+
36
+ skills: [
37
+ "skill 1",
38
+ "Skill 2",
39
+ "Skill 3",
40
+ ],
41
+ resume_link: "https://exapmple.com/resume",
42
+ },
43
+
44
+ project_shelf: {
45
+ enable: true,
46
+ projects: [
47
+ {
48
+ title: "Your Awesome Project",
49
+ featured: true,
50
+ state: "active",
51
+ desc: "Desctiption about your awesome project.",
52
+ image: "https://raw.githubusercontent.com/soymadip/portosaurus/refs/heads/compiler/static/img/icon.png",
53
+ website: null,
54
+ github: "https://github.com/soymadip/portosaurus",
55
+ Demo: "https://soymadip.github.io",
56
+ tags: ["your project's topic", "this is a tag", "another tag"],
57
+ },
58
+ ],
59
+ },
60
+
61
+
62
+ social_links: {
63
+
64
+ enable: true,
65
+ links: [
66
+ {
67
+ name: "Email",
68
+ icon: "mail",
69
+ desc: "Send me an email",
70
+ url: "${srt_url}/mail",
71
+ },
72
+ {
73
+ name: "LinkedIn",
74
+ icon: "linkedin",
75
+ desc: "Connect on LinkedIn",
76
+ url: "${srt_url}/linkedin",
77
+ pin: true,
78
+ },
79
+ {
80
+ name: "Telegram",
81
+ icon: "telegram",
82
+ desc: "Reach me on Telegram",
83
+ url: "${srt_url}/telegram",
84
+ pin: true,
85
+ },
86
+ {
87
+ name: "Instagram",
88
+ icon: "instagram",
89
+ desc: "Reach me on Instagram",
90
+ url: "/instagram",
91
+ pin: true,
92
+ },
93
+ ],
94
+ },
95
+
96
+ link_shortener: {
97
+ // Uses StaticShort
98
+
99
+ enable: true,
100
+ deploy_path: "/l",
101
+
102
+ short_links: {
103
+ mail: "mailto://you@yourDomain.com",
104
+ github: "https://github.com/yourUserName",
105
+ gitlab: "https://gitlab.com/yourUserName",
106
+ linkedin: "https://linkedin.com/in/yourUserName",
107
+ telegram: "https://telegram.me/yourUserName",
108
+ },
109
+ },
110
+
111
+ experience: {
112
+ enable: false,
113
+ list: [
114
+ {
115
+ company: "Company A",
116
+ position: "Software Engineer",
117
+ duration: "Jan 2020 - Present",
118
+ description: [
119
+ "Developed and maintained web applications using JavaScript, HTML, and CSS.",
120
+ "Collaborated with cross-functional teams to define, design, and ship new features.",
121
+ "Identified and fixed bugs to improve application performance.",
122
+ ],
123
+ },
124
+ {
125
+ company: "Company B",
126
+ position: "Intern",
127
+ duration: "Jun 2019 - Dec 2019",
128
+ description: [
129
+ "Assisted in the development of internal tools using Python and Bash.",
130
+ "Participated in code reviews and provided feedback to improve code quality.",
131
+ "Conducted research and provided recommendations for new technologies.",
132
+ ],
133
+ },
134
+ ],
135
+ },
136
+
137
+
138
+ tasks_page: {
139
+ enable: true,
140
+ tasks: [
141
+ {
142
+ title: "Add more Callouts",
143
+ description: "like question..",
144
+ status: "pending",
145
+ priority: "medium",
146
+ },
147
+ {
148
+ title: "Add colors to Markdown Headings",
149
+ description: "Take from Obsidian",
150
+ status: "pending",
151
+ priority: "high",
152
+ },
153
+ {
154
+ title: "Improve the Note card Icon extractor",
155
+ description:
156
+ "make it strip number before dir name, currently It shows blank icon(default book).",
157
+ status: "completed",
158
+ priority: "high",
159
+ },
160
+ {
161
+ title: "Improve Roadmap page",
162
+ description:
163
+ "add sub todos, shift from vibe code to orignal code, make mobile friendly",
164
+ status: "pending",
165
+ priority: "low",
166
+ },
167
+ {
168
+ title: "Fix Mermaid Diagram support",
169
+ description:
170
+ "showing: Hook is called outside the <ColorModeProvider>. Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.",
171
+ status: "pending",
172
+ priority: "medium",
173
+ },
174
+ {
175
+ title: "check prism js, dark and light background swap",
176
+ status: "completed",
177
+ description: "Looking better now.",
178
+ priority: "low",
179
+ },
180
+ {
181
+ title: "Make standalone Project.",
182
+ description: "Convert to Portosaurus project. remove personal stuff.",
183
+ priority: "high",
184
+ status: "active",
185
+ },
186
+ {
187
+ title: "Separate portfolio config",
188
+ description: "Separate portfolio specific settings to config.js.",
189
+ priority: "high",
190
+ status: "completed",
191
+ },
192
+ {
193
+ title: "make shortlinks icon field optional",
194
+ description:
195
+ "lower the title, then match in mapping. if icon key is defined, use it.",
196
+ priority: "low",
197
+ status: "pending",
198
+ },
199
+ {
200
+ title: "Rearrange the config.js",
201
+ description:
202
+ "Rearrange config, make more abstract. Add hero section configs.",
203
+ status: "active",
204
+ priority: "high",
205
+ },
206
+ {
207
+ title: "Fix favicon logic",
208
+ description:
209
+ "Fix favicon gen failed even if given diff value in usrConf.favicon, also when usrConf.hero_section.profile_pic to /img/some-pic.png",
210
+ status: "active",
211
+ priority: "high",
212
+ },
213
+ {
214
+ title: "Fix project shelf image placing",
215
+ description: "The image should align in the middle of card. Then fill the space if needed.",
216
+ status: "active",
217
+ priority: "low",
218
+ },
219
+ {
220
+ title: "Add shortlink generation",
221
+ description: "setup StaticShort while compiling portosaurus.",
222
+ status: "active",
223
+ priority: "normal",
224
+ },
225
+ {
226
+ title: "Add placeholder notice When no note is there",
227
+ description: null,
228
+ status: "active",
229
+ priority: "low",
230
+ },
231
+ ],
232
+ }
233
+ }
@@ -0,0 +1,7 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # Getting Started
6
+
7
+ This is a sample note. You can create your own notes in this directory.