diff --git a/config/head.js b/config/head.js
index 5581415..3dc0eb5 100644
--- a/config/head.js
+++ b/config/head.js
@@ -80,16 +80,16 @@ export default {
lang: 'en',
},
link: [
- {rel: 'preconnect', href: 'https://fonts.gstatic.com'},
- {rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap'},
- {rel: 'icon', type: 'image/png', href: 'favicon.png'},
- {rel: 'icon', type: 'image/svg', href: 'favicon.svg'},
+ { rel: 'preconnect', href: 'https://fonts.gstatic.com' },
+ { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap' },
+ { rel: 'icon', type: 'image/png', href: 'favicon.png' },
+ { rel: 'icon', type: 'image/svg', href: 'favicon.svg' },
],
script: [
- {src: 'https://static.cloudflareinsights.com/beacon.min.js', 'data-cf-beacon': '{"token": "2a03659d407a47e282375a70a91bdfc4"}', defer: true},
+ { src: 'https://static.cloudflareinsights.com/beacon.min.js', 'data-cf-beacon': '{"token": "2a03659d407a47e282375a70a91bdfc4"}', defer: true },
],
meta: [
- {name: 'viewport', content: 'width=device-width, initial-scale=1'},
+ { name: 'viewport', content: 'width=device-width, initial-scale=1' },
...prepareMeta(),
],
};
diff --git a/config/projects.js b/config/projects.js
new file mode 100644
index 0000000..7414934
--- /dev/null
+++ b/config/projects.js
@@ -0,0 +1,86 @@
+const projects = [
+ {
+ id: 1,
+ type: 'library',
+ stack: ['typescript'],
+ title: 'Generate Passphrase',
+ description: 'Secure random passphrase for Node.js',
+ repository: 'https://github.com/aldy505/generate-passphrase',
+ role: 'author',
+ },
+ {
+ id: 2,
+ type: 'library',
+ stack: ['go'],
+ title: 'Bob',
+ description: 'SQL query builder as an extension of Squirrel',
+ repository: 'https://github.com/aldy505/bob',
+ role: 'author',
+ },
+ {
+ id: 3,
+ type: 'library',
+ stack: ['go'],
+ title: 'PHC Crypto',
+ description: 'Password hashing with Argon2, Bcrypt, Scrypt, and PBKDF2 simplified',
+ repository: 'https://github.com/aldy505/phc-crypto',
+ role: 'author',
+ },
+ {
+ id: 4,
+ type: 'library',
+ stack: ['typescript'],
+ title: 'Malibu',
+ description: 'Framework-agnostic CSRF middleware for modern Node.js applications',
+ repository: 'https://github.com/tinyhttp/malibu',
+ role: 'author',
+ },
+ {
+ id: 5,
+ type: 'application',
+ stack: ['go', 'typescript', 'svelte', 'tailwindcss', 'postgresql', 'redis'],
+ title: 'Jokes Bapak2',
+ description: 'Image API for serving Indonesian dad jokes',
+ repository: 'https://github.com/aldy505/jokes-bapak2',
+ website: 'http://jokesbapak2.pages.dev/',
+ role: 'author',
+ },
+ {
+ id: 6,
+ type: 'library',
+ stack: ['typescript'],
+ title: 'Tinyhttp',
+ description: 'Typescript-based framework as a replacement for Express',
+ repository: 'https://github.com/tinyhttp/tinyhttp',
+ role: 'contributor',
+ },
+ {
+ id: 7,
+ type: 'application',
+ stack: ['vuejs', 'tailwindcss'],
+ title: 'ARCET Creative Visual Studio',
+ description: 'Website for ARCET',
+ website: 'https://www.arcet.id',
+ role: 'author',
+ },
+ {
+ id: 8,
+ type: 'application',
+ stack: ['vuejs', 'bootstrap'],
+ title: 'Pesanyuk',
+ description: 'Store-management application for Indonesian small to medium businesses',
+ website: 'https://pesanyuk.id',
+ role: 'contributor',
+ },
+ {
+ id: 9,
+ type: 'application',
+ stack: ['javascript', 'redis', 'mongodb'],
+ title: 'Teknologi Umum Bot',
+ description: 'A simple telegram bot for managing daily poll & programming-related quizes',
+ repository: 'https://github.com/teknologi-umum/bot',
+ role: 'author',
+ },
+];
+
+export default projects;
diff --git a/layouts/default.jsx b/layouts/default.jsx
index 7ee2a76..3b832a9 100644
--- a/layouts/default.jsx
+++ b/layouts/default.jsx
@@ -1,17 +1,33 @@
+import { useRoutes } from 'solid-app-router';
// eslint-disable-next-line no-unused-vars
-import {Route} from 'solid-app-router';
+import { For, lazy } from 'solid-js';
// eslint-disable-next-line no-unused-vars
-import {For} from 'solid-js';
-// eslint-disable-next-line no-unused-vars
-import {MetaProvider, Title, Link, Meta} from 'solid-meta';
+import { MetaProvider, Title, Link, Meta } from 'solid-meta';
import head from '../config/head.js';
import '@fontsource/poppins';
+const route = [
+ {
+ path: '/',
+ component: () => lazy(() => import('../pages/index.jsx')),
+ },
+ {
+ path: '/projects',
+ component: () => lazy(() => import('../pages/projects.jsx')),
+ },
+ {
+ path: '*all',
+ component: () => lazy(() => import('../pages/index.jsx')),
+ },
+];
+
+// eslint-disable-next-line no-unused-vars
+const Routes = useRoutes(route);
+
function Default() {
return (
<>
-
{head.title}
{link =>
@@ -20,6 +36,11 @@ function Default() {
}
+
>
);
}
diff --git a/pages/index.jsx b/pages/index.jsx
index 42ae023..e31322e 100644
--- a/pages/index.jsx
+++ b/pages/index.jsx
@@ -1,5 +1,5 @@
// eslint-disable-next-line no-unused-vars
-import {createSignal, For, onMount, Show} from 'solid-js';
+import { createSignal, For, onMount, Show } from 'solid-js';
import anime from 'animejs';
// eslint-disable-next-line no-unused-vars
import MadeWithLove from '../components/MadeWithLove';
@@ -18,16 +18,16 @@ function Index() {
const [repoRequest, setRepoRequest] = createSignal(false);
const link = [
+ {
+ link: 'projects',
+ text: 'Projects',
+ subtext: 'See my projects & libraries!',
+ },
{
link: 'mailto:aldy505@tutanota.com',
text: 'Email',
subtext: 'Get in touch!',
},
- {
- link: 'https://www.github.com/aldy505',
- text: 'Github',
- subtext: 'See my projects & libraries!',
- },
{
link: 'https://t.me/aldy505',
text: 'Telegram',
@@ -43,12 +43,12 @@ function Index() {
anime({
targets: '.repository',
opacity: [
- {value: 0, duration: 500, delay: 500},
- {value: 100, duration: 4000},
+ { value: 0, duration: 500, delay: 500 },
+ { value: 100, duration: 4000 },
],
translateY: [
- {value: 800, duration: 500, delay: 800},
- {value: 0, duration: 4000},
+ { value: 800, duration: 500, delay: 800 },
+ { value: 0, duration: 4000 },
],
});
} catch {
@@ -57,71 +57,67 @@ function Index() {
});
return (
-
-
-
-
-
-
-
- Reinaldy Rafli
-
-
-
-
-
-
-
-
- Not a CS student, don't work in IT industry, but most of the time I do web development. Always love to be working on a cool project 😉
-
-
-
-
-
-
-
+
+
+
+
+
+ Reinaldy Rafli
+
-
-
-
}>
-
-
-
-
-
-
+
+
+
+
+ Not a CS student, don't work in IT industry, but most of the time I do web development. Always love to be working on a cool project 😉
+
+
+
+
+
+
+
+
+
+
+
}>
+
+
+
+
+
+
);
diff --git a/pages/projects.jsx b/pages/projects.jsx
new file mode 100644
index 0000000..48ea4d0
--- /dev/null
+++ b/pages/projects.jsx
@@ -0,0 +1,88 @@
+// eslint-disable-next-line no-unused-vars
+import { NavLink } from 'solid-app-router';
+// eslint-disable-next-line no-unused-vars
+import { For, Show } from 'solid-js';
+// eslint-disable-next-line no-unused-vars
+import Icons from '../components/Icons';
+import projects from '../config/projects';
+
+function Projects() {
+ return (
+ <>
+
+
+
+ Reinaldy Rafli
+
+
+
+ Projects
+
+
+
+
+ {project =>
+
+
+
+
{project.title}
+
{project.description}
+
+
+
+
{project.type.toUpperCase()}
+
{project.role.toUpperCase()}
+
+
+
+
+
+
+ }
+
+
+
+
+
+ These are just a few of my projects.
+ Explore more on my Github
+
+
+ >
+ );
+}
+
+export default Projects;
diff --git a/solid.config.jsx b/solid.config.jsx
index 5e19456..e66ee6a 100644
--- a/solid.config.jsx
+++ b/solid.config.jsx
@@ -1,24 +1,12 @@
-import {lazy} from 'solid-js';
-import {render} from 'solid-js/web';
+import { render } from 'solid-js/web';
import 'virtual:windi.css';
// eslint-disable-next-line no-unused-vars
-import {Router} from 'solid-app-router';
+import { Router, useRoutes } from 'solid-app-router';
// eslint-disable-next-line no-unused-vars
import Default from './layouts/default.jsx';
-const route = [
- {
- path: '/',
- component: () => lazy(() => import('./pages/index.jsx')),
- },
- {
- path: '*all',
- component: () => lazy(() => import('./pages/index.jsx')),
- },
-];
-
render(() => (
-
+
), document.getElementById('root'));
diff --git a/vite.config.js b/vite.config.js
index d2dd79b..d935f5b 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -1,4 +1,4 @@
-import {defineConfig} from 'vite';
+import { defineConfig } from 'vite';
import solidPlugin from 'vite-plugin-solid';
import windiCSS from 'vite-plugin-windicss';