Song Siwattanasombat

Loading portfolio

Back to projects

A data-driven portfolio with an About homepage, filterable project wall, and reusable case-study pages.

  • Next.js 14
  • React 18
  • TypeScript
  • Tailwind CSS 3
  • App Router
  • CSS Grid
  • Design Tokens
  • Responsive UI
Live DemoGitHub

Portfolio Core Idea is the design and engineering system behind this website. An About homepage introduces the developer, while the Projects page has evolved from a Pinterest-inspired masonry layout to a consistent image grid for easier browsing. Typed project data generates responsive case studies from one reusable structure.

Portfolio Goals

  • Fast visual scanning
  • Consistent case studies
  • Reusable project data
  • Responsive browsing
  • Personal identity
  • Simple maintenance

The portfolio must support quick browsing, useful project depth, and simple long-term maintenance.

  • A filterable image grid makes projects easy to scan.
  • Shared case-study pages provide consistent technical context.
  • Typed content keeps updates separate from presentation components.

From Identity to Reusable Portfolio

  1. 1Define the visual direction
  2. 2Model projects as typed data
  3. 3Build the filterable project grid
  4. 4Create reusable case-study sections
  5. 5Test themes and responsive layouts

A repeatable workflow keeps identity, content, components, and responsive behaviour aligned.

From Project Grid to Case Study

Open the visual project wall
Choose a project filter

All

Complete collection

Client Projects

Work created for clients

Showcases

Portfolio and learning projects

Scan responsive multi-column project cards
Hover or focus to reveal title and technology
Select a project
Open the shared /projects/[slug] detail route
Read Overview, workflow, diagrams, decisions, and limitations
Next action

External

Open Live Demo or GitHub

Continue browsing

Return to the project wall

Visitors move from visual discovery to technical detail through one consistent route.

The stack keeps a small content-driven site typed, fast, and easy to maintain.

  • Next.js App Router combines shared layouts, metadata, and dynamic project routes.
  • React isolates interactive features such as filtering, image viewing, and theme switching.
  • TypeScript and Tailwind CSS provide reliable content contracts and responsive styling.

Browser-native features keep the presentation layer lightweight.

  • CSS Grid aligns image-led project cards without a JavaScript layout library.
  • Version-controlled data files are simpler than a CMS for a single maintainer.
  • CSS tokens and local storage support consistent, persistent themes.

Portfolio Application Architecture

User Browser
Next.js App RouterServer and client components
Root LayoutHeader · route content · footer

Projects Page

ProjectFilterGridAll · Client · Showcases
ProjectCardImages · hover · focus

Project Route

[slug] PageMetadata + links
Detail SectionsText · lists · diagrams

Supporting Routes

About / HomeIntroduction · skills · timeline
ContactEmail + LinkedIn
Typed Portfolio DataProjects · sections · profile content

Shared data supplies project discovery, generated metadata, and every reusable case-study page.

A central project dataset supplies the Projects page, metadata, dynamic routes, and reusable detail sections.

One Project Object, Multiple Views

Project ObjectOne source of truth per case study

Identity and Discovery

slug + title
description + cover
tech stack + card height

Detail and Evidence

long description
demo + GitHub links
repeatable sections

Sections select their own presentation

Text CardBody + bullet points
Visual CardImage + placeholder + grid
DiagramFlow + architecture + model

↓ renders

Project Card

↓ generates

Page Metadata

↓ builds

Detail Page

Each project object supplies card details, metadata, links, and repeatable case-study sections.

pic2ndImage placeholder

The interface balances visual character with clear, accessible navigation.

  • Links expose the same information on hover and keyboard focus.
  • Filters update one project collection without duplicating data.
  • A responsive grid, semantic structure, and colour tokens preserve readability across devices and themes.

TypeScript and browser checks validate the current foundation; the next iteration should strengthen performance and testing.

  • Replace position-based project categories with explicit data fields.
  • Add image optimisation and automated tests for filters, routes, themes, and responsive layouts.
  • Consider a CMS only if editing frequency or collaboration increases.