All projects

icandev.ir — This Site

This portfolio: a fully static Next.js site with no backend, typed content files, and a Docker image deployed to a VPS through Coolify.

Role
Designer & Developer
Period
2026
Type
Personal

Overview

Rebuilt from an unfinished React + Vite prototype. Every page is prerendered at build time, there is no database and no API, and all content lives in typed modules under src/content.

The problem

The previous version had a subtle failure that is worth naming: the project cards accepted a prop and then ignored it, rendering the same project four times. Nothing crashed, nothing warned — the site just quietly lied. The rebuild is organised so that class of bug is structurally hard to reintroduce.

Approach

  • Content is data, not markup. Every string lives in a typed record under src/content, and components render what they are given.
  • One project per file, collected in a single array. Deleting a project is removing one line — the list page, homepage, sitemap and static route generation all read from that array, so nothing is left pointing at a page that no longer exists.
  • No backend at all. No API routes, no database, no server actions; the contact page uses mailto: and tel: links, so there is nothing to keep running or to secure.
  • SCSS Modules over a utility framework, with colour and spacing centralised as CSS custom properties instead of hex literals repeated across stylesheets.
  • Shipped as a standalone Docker image so the VPS deployment is the same artefact that was built and tested locally.

What shipped

  • Fully static — every route prerendered at build time.
  • Adding or removing a project touches one file.
  • Multi-stage Docker build on Next.js standalone output.

Outcome

A site that is quick to update and effectively free to run, with the content model doing the work that used to be done by remembering things.

More work