Bento Grids Portfolio

Bento-style portfolio app with a modular CMS-driven showcase, media integrations, and experimental 3D/animation features.

Published on
Modified at
Reading time
7 min read
Word count
1318 words
Bento Grids Portfolio
Bento Grids Portfolio

Overview

Bento Grids Portfolio is a web application specifically designed to showcase my work, expertise and experience in the field of software development.

With the application of the bento box style, the user interface looks diverse and neat. In addition, it makes the delivery of information clearer because each section is neatly divided with each gap separating it.

This application uses a WYSIWYG(opens in a new tab) editor to make it easier to create showcase content and has several integrations with external applications developed by myself or others.

Role

Full Stack Web Developer

Core Stack

Let's take a look at the core stack used in this project:

JavaScript

The programming language of the web.

TypeScript

A superset of JavaScript that compiles to clean JavaScript.

v5.5.4
Next.js

A React framework for production.

v14.2.8
TailwindCSS

A utility-first CSS framework.

v3.4.15
Prisma ORM

Next-generation ORM for Node.js and TypeScript.

v5.22.0
PlanetScale

The world's most advanced serverless database.

Supabase

An open source Firebase alternative.

Sentry

Application monitoring and error tracking.

v8.39.0
Vercel

The platform for frontend developers.

Cloudflare

The security and performance company.

Three.js

JavaScript 3D Library.

v0.170.0
PostgreSQL

The world's most advanced open source relational database.

Google Analytics

The most popular web analytics service.

The core stack used in this project includes:

Integration

Period

January 31, 2024 as the latest branch development

Resources

Changes

  1. Experimental Version

    It's very good actually, but performance issues too because the images are too big, especially if I maintain the image quality. If I lower the image quality, then for large images it looks unattractive. Also, it will require more data to download high-quality images.

    Screenshot of Experimental Version
  2. Simple Version + Showcase Feature

    In this version I actually used LottieFiles which is Animation for SVG. But, unfortunately it adds weight to the performance of my application, especially for the mobile version which feels very bad, because the desired animation size is quite heavy.

    Screenshot of Simple Version + Showcase Feature
  3. Rigid version

    in this version I added the following sections:

    • About me
    • Have worked for
    • Showcase Preview
    • Tech Stacks
    Screenshot of Rigid Version
  4. Relaxed version (Current)

    In this version I updated the rounded parts to make the elements look softer.

    Since I've been using Microsoft Clarity, I've gained more insights into my website, such as heatmaps and visitor interactions. I noticed that some visitors were hovering and clicking on cards, seemingly assuming that there was specific interaction on the Me photo and the 'About Me' card. Since those are the places that get the most attention and visitors interact with those sections, in this version I moved the resume download button from the navigation menu and added the LinkedIn and email icons closer to my profile photo. I also added a 'border beam' to at least have an interesting effect and increased the background blur and improved the quality and lighting of my photos.

    And yes, from then on visitors were more interested in clicking on the resume button than clicking on my photo which had no interaction whatsoever. (still envisioning what can and should be added, while that's it)

    Screenshot of Relaxed Version
  • Update for Showcase Preview List Component

    In the image below, I actually really like this UI but it's a little out of the bento grid style, because it looks like a regular website section style, and I want to fix it because I want to prioritize quality and clarity over quantity, which also causes the text to be cut off and become difficult to read.

    Screenshot of Old Showcase List

    So, I made changes to make it more neat and clear.

    Screenshot of New Showcase List
  • Add interactive cursor effect

    and I finally found a pretty interesting effect, which is a round effect that will change the color based on the difference in color intensity of the intersecting elements. This effect follows the position of the cursor and is only implemented on text because otherwise it would break the appearance and comfort in using the cursor when interacting with the application view (in this case). It uses CSS mix-blend-mode(opens in a new tab).

    Screenshot of Cursor Effect
  • Add Deri Kurniawan 3D Model Character

In this phase, I added the Let's Connect and Help Me Improve sections, both using 3D elements created with React Three Fiber (R3F). Orbit control was enabled for both components with a maximum Azimuth angle of 30° for each. I then added an event so that the 3D model's head would follow the cursor, while the other head would follow the camera position.

I also used the <Html /> component from @react-three/drei to embed React nodes within the 3D environment. This enables the React elements to move dynamically within the scene, creating an immersive effect when the orbit controls are adjusted.

Screenshot of 3D Model

For the 3D model, I created it with ReadyPlayerMe(opens in a new tab) and sourced the animation from Mixamo(opens in a new tab).

Because ReadyPlayerMe only generates .glb files, I had to convert it to .fbx using Blender so I could upload it to Mixamo and customize the model with animations. I also used this tool, https://gltf.pmnd.rs/(opens in a new tab), to generate JSX from the model.


The journey of this project ends here.

Keywords:

Let's Create Something Amazing Together

I'm always open to new projects and ideas. Let's connect and make something great together.

Get in Touch
white gray pattern background