PersonalHard

HadiHz Portfolio (v3)

The third generation of my personal site: a Next.js front end with 3D and particle visuals, backed by a NestJS and Prisma API on AWS.

— Overview

Architecture Overview

graph TB
    subgraph Frontend["Next.js on Vercel"]
        A[App Router]
        B[HeroUI components]
        C["Spline 3D + tsparticles + cobe"]
    end
    subgraph Backend["NestJS API"]
        D[REST controllers]
        E[Prisma ORM]
        F[Swagger docs]
        G[Rate limiting]
    end
    subgraph AWS
        H[(S3 media)]
        I[SES email]
    end
    A --> D
    E --> J[(PostgreSQL)]
    D --> H & I

The direct predecessor of the site you are reading now, and the first version where the content lived behind a real API instead of in source files. The front end is a Next.js application leaning heavily on the HeroUI component library, with a Spline 3D scene, a tsparticles background and a cobe globe carrying the visual identity.

The companion backend is a NestJS service using Prisma against PostgreSQL. It handles media uploads to S3 through pre-signed URLs, sends contact-form mail via SES, validates its own configuration with Joi at boot, and documents itself with Swagger.

Key Features:

  • Project, course and skill content served from a typed REST API
  • Pre-signed S3 uploads so media never transits the API process
  • Contact form delivered through AWS SES
  • Request throttling and DTO-level validation on every endpoint
  • Swagger documentation generated from the controllers
  • Boot-time configuration validation with Joi
  • Vercel Analytics and Speed Insights wired into the front end

Tech Stack:

  • Frontend: Next.js, React, TypeScript, HeroUI, Tailwind CSS, Spline, tsparticles
  • Backend: NestJS, TypeScript, Prisma, Swagger
  • Database: PostgreSQL
  • Infrastructure: Vercel, AWS S3, AWS SES

Retired in favour of the current Astro and Strapi build, which cut the JavaScript payload dramatically and moved content editing into a proper CMS.

— Stack
TypeScriptNext.jsReactNestJSNode.jsPrismaPostgreSQLTailwind CSSAWS S3Vercel