diff --git a/.eslintrc.js b/.eslintrc.js index bffb08c..520856e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -17,5 +17,6 @@ module.exports = { ], rules: { 'capitalized-comments': ['off'], + 'object-curly-spacing': ['error', 'always'], }, }; diff --git a/commitlint.config.js b/commitlint.config.js index 3347cb9..422b194 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1 +1 @@ -module.exports = {extends: ['@commitlint/config-conventional']}; +module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/components/Icons.jsx b/components/Icons.jsx new file mode 100644 index 0000000..209358d --- /dev/null +++ b/components/Icons.jsx @@ -0,0 +1,129 @@ +// Originally created by Konpa (under MIT License) and +// supported by various contributors. +// Copyright (C) 2015 Konpa +// +// All product names, logos, and brandsare property of their respective owners. +// All company, product and service names used in this website are for identification purposes only. +// Use of these names, logos, and brands does not imply endorsement. + +function Icons({ name }) { + switch (name) { + case 'bootstrap': + return ( + + + + ); + case 'bulma': + return ( + + + + ); + case 'docker': + return ( + + + + ); + case 'go': + return ( + + + + ); + case 'javascript': + return ( + + + + ); + case 'julia': + return ( + + + + ); + case 'lua': + return ( + + + + ); + case 'mongodb': + return ( + + + + ); + case 'mysql': + return ( + + + + ); + case 'nodejs': + return ( + + + + ); + case 'postgresql': + return ( + + + + ); + case 'redis': + return ( + + + + ); + case 'sass': + return ( + + + + ); + case 'tailwindcss': + return ( + + + + ); + case 'typescript': + return ( + + + + ); + case 'vuejs': + return ( + + + + ); + case 'svelte': + return ( + + + + + ); + case 'github': + return ( + + + + ); + case 'arrow-right': + return ( + + ); + default: + return name.charAt(0).toUpperCase() + name.substring(1); + } +} + +export default Icons; diff --git a/components/LinkList.jsx b/components/LinkList.jsx index d5eb3b3..a49c197 100644 --- a/components/LinkList.jsx +++ b/components/LinkList.jsx @@ -1,6 +1,6 @@ -import {createSignal} from 'solid-js'; +import { createSignal } from 'solid-js'; -function LinkList({link, text, subtext}) { +function LinkList({ link, text, subtext }) { const [hoverState, setHoverState] = createSignal(false); return (
  • 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 -

    -
    -
    - My Memoji -
    -
    - -

    - 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 😉 -

    - -
      - {item => - - } -
    - - +
    +
    +
    +
    +

    + Reinaldy Rafli +

    - -
    -
    }> -
    -
    - {repo => -
    - -
    - }
    - -
    -
    - -
    - -
    - +
    + My Memoji
    + +

    + 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 😉 +

    + +
      + {item => + + } +
    + + +
    + +
    +
    }> +
    +
    + {repo => +
    + +
    + }
    + +
    +
    + +
    + +
    +
    ); 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

    + My Memoji +
    +
    +
    Projects
    +
    + +
    + + {project => +
    +
    +
    +

    {project.title}

    +

    {project.description}

    +
    +
    +
    +

    {project.type.toUpperCase()}

    +

    {project.role.toUpperCase()}

    +
    +
    +
    +
    + + {item =>
    } +
    +
    +
    +
    +
    + +
    + + + +
    + +
    + +
    + + + +
    +
    + Website +
    +
    +
    +
    +
    +
    + } +
    +
    + +
    +

    + 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';