← All projects

Portfolio Website

I built this portfolio website from scratch to showcase my projects and development skills to recruiters and employers. What makes it different from a typical portfolio is that every project includes a full version history timeline with screenshots and videos, so you can follow exactly how my work evolved over time. I manage all content through a password-protected admin panel I built myself, with drag-and-drop media uploads and a live preview. The site is available in both English and Dutch and works on any device. I wrote the entire backend by hand in plain PHP 8.1 no frameworks, no shortcuts backed by a MySQL database, styled with Tailwind CSS, and running on Apache. Security was a priority throughout: session-based authentication, CSRF protection on every form, and bcrypt password hashing.

PHP Javascript MySQL Git Tailwind CSS

Version history

V1.0.2 Added introduction, skills and contact
Transformed the homepage from a plain project list into a full personal portfolio page. Added a hero section with name, role, and bio, a skills/technologies block, and a contact form. Also added an availability banner, CV download button, and LinkedIn link. On the admin side, a new settings page was introduced to manage all hero content, and a messages inbox was added to view contact form submissions.

Changes

- Hero section — Dynamic name, role, and multi-paragraph bio (NL/EN) pulled from admin settings
- Availability banner — Toggleable top banner with localised text
- Skills block — Tag cloud of skills/technologies managed from settings
- CTA buttons — Download CV, "Get in touch", and LinkedIn links in the hero
- Contact form — New contact section with name/email/message fields; submissions stored in a new contact_messages DB table
- Admin: Settings page — New page to edit hero name, role, description, banner text, skills list, and CV path
- Admin: Messages inbox — New page to read and manage incoming contact form messages
- DB: cover_image column — Added cover_image field to the projects table
- Localisation — Added NL/EN strings for hero, contact, skills, and home sections
V1.0.1 README & Gitignore Cleanup
Follow-up commit to clean up the README and update the .gitignore. No functional changes to the application itself.

Changes

- Rewrote and shortened the README
- updated .gitignore
V1.0.0 Initial Commit, Full Codebase
First push of the entire portfolio website. All core files were added at once, including the backend logic, database setup, templates, and public entry point.

Changes

- Added 20 files totalling 1810 lines
- public entry point (index.php)
- database schema (init.sql)
- authentication (Auth.php)
- database connection (Database.php)
- language system (Lang.php)
- config, helpers, all admin templates (dashboard, login, project form, version form, change password)
- all public templates (home, project, layout)
- .env.example, .gitignore, and .htaccess