Giter VIP home page Giter VIP logo

project-the-catalogue's Introduction

The Catalogue

May 2024 ~ June 2024 (3 weeks)

This is a catalog concept website developed for showcasing my portfolio.

Features

  • Portfolio List: A summary list of each project, with thumbnail videos automatically playing when hovered over. All data is linked with the Notion database.
  • Project Details: Integrated with GitHub repository README markdown files for detailed project descriptions.
  • Responsive Design: Ensures good visibility on mobile screens.
  • Multilingual Support: Supports both English and Korean.

Technical Focus

  • While exploring how to use Notion as a backend, I discovered the Notion API. I realized that managing my portfolio through it would be efficient.
  • In Notion, I manage project descriptions, roles, tech stacks, and links.
  • Due to CORS issues with Notion, I set up a proxy using Cloudflare Worker.
  • As I typically organize my projects in README.md files, the project introduction page does not pull data from Notion but instead displays the GitHub README markdown file converted to HTML.
  • Next.js middleware and the next-i18n-router are used to switch languages between Korean and English.

Demo

  1. Viewing Projects

    catalogue_uycnweljjlc67aojjph3.webm

  2. Using Notion as Backend

    catalogue-notion.webm

Tech Stack

Frontend

  • Framework: Next.js
  • Language: TypeScript
  • Styling: TailwindCSS
  • Markdown Conversion: react-markdown, rehype-highlight, rehype-raw, remark-gfm, @9gustin/react-notion-render
  • Multilingual Support: next-i18n-router, next-cookie

Backend

  • Project Metadata: @notionhq/client (Notion API)
  • Project Details: GitHub Repository

Development Environment

  • Source Code: GitHub
  • Package Management: pnpm
  • Others: VSCode, Eslint, Prettier

Cloud Services and Deployment

  • Frontend Hosting and Deployment: Vercel

References


Reflection

  • I struggled with CORS issues in using Notion API until I found a Stack Overflow post suggesting the use of Cloudflare for proxy setup. Sinc Notion API does not support CORS, it was inconvenient for client-side usage. During development, I realized I could just use server components for static page rendering. I ended up dividing server and client components, though I decided to keep the proxy just in case.
  • Shifting data loading to server components also altered the behavior of the Korean-English language switching. Previously, language switching was handled seamlessly through component swapping. It now triggers page reloads due to routing, but the source has become more SEO-friendly. I'm curious if different libraries could influence this behavior, but for now, I'm satisfied with a simple implementation.
  • Images and videos fetched from Notion are stored on AWS S3 and expire after some time. Consequently, I set the revalidate parameter to 1 minute. Furthermore, due to a rate limit that causes errors when requests increase rapidly, I have started using Cloudinary for new image and video uploads to avoid disruptions.
  • Fixing the size and position of the left sidebar after loading turned out to be unexpectedly tricky. I spent quite some time stabilizing its appearance, but I managed to learn some CSS tricks from the Next.js official website. Adjusting for mobile screens was also challenging, but the solutions turned out to be pretty straightforward.
  • Although I was inspired by some cool ideas from Pinterest, I opted for a simpler design to keep the development straightforward. I need to stick to the basics and avoid continually adding more work with every new idea.

Next

  • I would like to explore decorating the site with 3D rendering.

project-the-catalogue's People

Contributors

urbanscratcher avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.