MMehmet Ünlü
HomeAboutProjectsNotesResumeContact
TR

Mehmet Ünlü

I study Electronics and Communication Engineering at ITU and build hands-on projects around forecasting, computer vision, and making data workflows faster.

HomeAboutProjectsNotesResumeContact
Next.jsTypeScriptExpressPrismaAdmin CMSMedia UploadsSelf-HostedActive Development

Personal Portfolio Platform

Built and operate a personal portfolio platform that combines a Next.js frontend, an API backend, admin-managed content, project galleries, notes with file uploads, contact handling, and a self-hosted production deployment.

GitHubDemo

Stack

Next.js + API

Frontend and backend platform

Content

Dynamic

Projects, notes, resume, uploads

Deploy

Self-hosted

HTTPS production environment

Status

In progress

Features are still being added

Project Gallery

Personal Portfolio Platform
Personal Portfolio Platform screenshot 2
Personal Portfolio Platform screenshot 3
Personal Portfolio Platform screenshot 1

1/4

Problem

A static portfolio would require code changes for every new project, note, image, or resume update, and it would not show the engineering work behind content management and deployment.

Challenge

The challenge was turning a personal website into a maintainable product: secure admin access, durable uploads, dynamic content, rich note rendering, responsive galleries, caching, and production hardening without making the system heavy.

Architecture

How the pieces fit together.

The frontend uses Next.js App Router with ISR caching. A typed API layer manages projects, notes, uploads, resume content, and contact messages, while the production environment runs behind an HTTPS edge layer with separated public and administrative workflows.

Architecture View

System structure and decision flow

Next.js Frontend

Public portfolio, notes, projects, resume, and localized routes.

Express API

REST endpoints for content, uploads, contact messages, and admin actions.

Admin CMS

Project galleries, note files, image cropping, and dynamic updates.

HTTPS Edge

Public entry point with separated production services.

Dataset / Inputs

  • Portfolio content, uploaded project media, technical notes, resume data, contact messages, and production deployment configuration.

Technical Decisions

  • Use a full-stack architecture instead of a static-only portfolio so content can be managed without code changes.
  • Keep public content cached with ISR while preserving no-store behavior for authenticated admin workflows.
  • Store uploaded media persistently and reference files through controlled API paths.
  • Place the app behind an HTTPS edge layer and keep administrative workflows separated from public content.

Implementation Details

  • Next.js renders the public portfolio, localized routes, project pages, notes, and resume views.
  • Express and Prisma expose REST endpoints for projects, notes, uploads, profile data, contact messages, and admin actions.
  • The admin dashboard supports project galleries, cover images, image cropping, PDF/HTML note files, and Markdown content.
  • Production is deployed as separated application services behind a public HTTPS entry point.

Metrics / Results

  • The site supports dynamic projects, gallery uploads, image cropping, PDF/HTML note attachments, Markdown and KaTeX rendering, contact messages, hardened admin flows, self-hosted deployment, and is still actively being expanded.

Lessons Learned

  • A portfolio becomes more useful when content operations are part of the system, not manual code edits.
  • Caching improves perceived speed, but admin routes and public routes need different freshness rules.
  • Upload handling has to consider persistence, validation, previews, and long-term deploy behavior together.

Future Improvements

  • Move uploads to object storage for simpler backups and CDN delivery.
  • Add search and filtering across projects and technical notes.
  • Introduce richer analytics and uptime monitoring after the custom domain is attached.
  • Continue expanding the admin workflow as new portfolio needs appear.