diff --git a/source/generate/recursiveParse/parsePortfolio.ts b/source/generate/recursiveParse/parsePortfolio.ts
index 9147886..94cda59 100644
--- a/source/generate/recursiveParse/parsePortfolio.ts
+++ b/source/generate/recursiveParse/parsePortfolio.ts
@@ -16,33 +16,35 @@ export default function parsePortfolio(data: DataToPass): void {
if (lastPath == "0") {
portfolioData.overview = markdownData.content
} else {
- ;(markdownData.badges as string[]).forEach((slug) => {
- // todo: handle cases when icon is not on simple-icons
+ if (markdownData.badges) {
+ ;(markdownData.badges as string[]).forEach((slug) => {
+ // todo: handle cases when icon is not on simple-icons
- portfolioData.skills.add(slug)
+ portfolioData.skills.add(slug)
- const icon = simpleIcons.Get(slug)
+ const icon = simpleIcons.Get(slug)
- const color = tinycolor(icon.hex).lighten(5).desaturate(5)
+ const color = tinycolor(icon.hex).lighten(5).desaturate(5)
- // save svg icon
- writeToFile(
- `${iconsDirectoryPath}/${icon.slug}.json`,
- JSON.stringify({
- svg: icon.svg,
- hex: color.toHexString(),
- isDark: color.isDark(),
- title: icon.title,
- })
- )
- })
+ // save svg icon
+ writeToFile(
+ `${iconsDirectoryPath}/${icon.slug}.json`,
+ JSON.stringify({
+ svg: icon.svg,
+ hex: color.toHexString(),
+ isDark: color.isDark(),
+ title: icon.title,
+ })
+ )
+ })
+ }
const project: PortfolioProject = {
name: markdownData.name as string,
image: markdownData.image as string,
overview: markdownData.overview as string,
- badges: markdownData.badges as string[],
- repo: markdownData.repo as string,
+ badges: (markdownData.badges as string[]) || [],
+ repo: (markdownData.repo as string) || "",
}
portfolioData.projects[urlPath] = project
diff --git a/source/markdown/portfolio/future projects.md b/source/markdown/portfolio/future projects.md
new file mode 100644
index 0000000..22ee923
--- /dev/null
+++ b/source/markdown/portfolio/future projects.md
@@ -0,0 +1,99 @@
+---
+name: future projects
+overview: Projects I'll work on in the future
+image: /img/icon.png
+---
+
+
+
+These are the projects I'll be working on in the future. They are ordered alphabetically.
+
+## babel-compressor
+
+- C
+
+A compression algorithm based on [the library of babel](https://libraryofbabel.info/theory.html).
+
+## boy-lang
+
+- rust
+- llvm
+
+My own programming language.
+
+## Disko
+
+- C
+- python
+- qt
+
+SSD health manager for linux.
+
+## flatpak GUI
+
+- tauri
+- rust
+- react
+- deno
+- typescript
+
+A distro-agnostic graphical front-end for flatpak
+
+## gnome life calendar
+
+- go
+- gtk
+
+gnome extension to add [life calendar](https://waitbutwhy.com/2014/05/life-weeks.html) to top bar calendar.
+
+## mcpk.io
+
+- godot
+
+an accurate minecraft parkour training with the same movement logic.
+
+## onetab-firefox
+
+- javascript
+- typescript
+- svelte
+- html5
+- css3
+
+onetab for firefox.
+
+## Starlight prince
+
+- godot
+
+A platformer game based on [a minecraft map](https://blog.naver.com/edward2065/222304395450) ([YouTube](https://www.youtube.com/playlist?list=PL1dMxl3V0rvgYQi4C-UEzW7s24D4EfBXf)).
+
+## War Brokers Homepage
+
+- Vue
+- nuxtjs
+- vite
+- node.js
+- javascript
+- typescript
+- html5
+- css3
+- sass
+
+A new homepage for [warbrokers.io](https://warbrokers.io).
+
+## War Brokers timeline
+
+- redis
+- graphQL
+- [yew](https://github.com/yewstack/yew)
+
+Events happened in the War Brokers community.
+
+## xbrowsersync mobile rewrite
+
+- react native
+
+get some code from [xbrowsersync app](https://github.com/xbrowsersync/app).
diff --git a/source/src/pages/Page/index.tsx b/source/src/pages/Page/index.tsx
index 7f5ee7d..59bd692 100644
--- a/source/src/pages/Page/index.tsx
+++ b/source/src/pages/Page/index.tsx
@@ -244,7 +244,7 @@ const Page = () => {
)}
- {pageType == PageType.PORTFOLIO_PROJECT && (
+ {pageType == PageType.PORTFOLIO_PROJECT && pageData.repo && (