A headless, Git-centric portfolio system with automated CI/CD and a custom CMS dashboard, removing the need for a traditional database.
I built this system to solve the problem of content maintenance. Instead of editing code every time I finish a project, I developed a private dashboard that talks directly to GitHub (Content Repository). Every save triggers an automated chain reaction: the system safely commits my changes, alerts my hosting provider, and instantly rebuilds the website. In this case I used Vercel as my hosting provider.
Every project and article in this portfolio is stored as a standard .md file, allowing for clean, structured writing that synchronizes effortlessly. Data such as experiences, contact details, and tech stacks are handled via JSON. By utilizing this 'content-as-code' model, the system operates entirely without a traditional database, ensuring maximum portability and performance.
While this decoupled architecture is powerful, it introduced a unique synchronization challenge: Vercel deployments are usually only triggered by changes in the Frontend repository, not the Content repository.
To solve this, I implemented two key workarounds:
In the frontend package.json, the build command is configured as follows:
{
"scripts": {
"build": "git submodule update --remote --recursive && next build"
}
}By adding git submodule update --remote --recursive directly to the build command, I've ensured that my CI/CD environment (Vercel) ignores cached submodule states and always fetches the most recent commits from the 0xfzz-portofolio-content repository. This creates a truly seamless, "headless" experience where the website and the data are always in perfect sync.