Astro routes. Contains the overview, projects index, blog pages and each single project case-study route.
Skado.astro, PetNoah.astro etc.. Portfolio case study
A focused breakdown of the real UI elements used in this portfolio: architecture, file organization, palette, typography, components, iconography and interaction patterns.
Information architecture
Five distinct areas, each with a clear purpose. The portfolio is organised around a single top-level narrative that branches into project depth, personal context and content.
Project organisation
Each directory has a single responsibility. Astro pages own routing; components own interactivity; the API directory handles the only server-side concern: contact form delivery.
Astro routes. Contains the overview, projects index, blog pages and each single project case-study route.
Skado.astro, PetNoah.astro etc.. Reusable Astro and React components: hero, project cards, contact popup, blog cards, footer, TOC.
ContactPopup.tsx, ProjectShowcase.tsx etc.. Global page shell. Handles Header, Footer, SEO title and optional TopBanner across pages.
src/layouts/Layout.astro Server endpoints. The contact API receives form data and sends the message by email.
src/pages/api/contact.ts Static visual assets: logo, avatar, project thumbnails, blog covers and case-study images.
Logo.png, Skado-preview.png etc.. Used for routing, static structure, page layouts and case-study pages.
Used only where interaction is needed: popup, filters, animated UI, hover states.
Used for typed component props, project objects, form state and UI data structures.
Used mostly inside React components for fast visual iteration and component-level styling.
Used for page-specific case-study layouts and large visual sections.
Used for popup transitions, animated labels and controlled UI motion.
Used for functional interface icons like close, send, alerts and checks.
Used by the contact form to send messages to my email address.
Palette
A restrained, purposeful colour system. Black creates premium focus; soft white ensures legibility; matrix green is used sparingly to signal activity and interaction – never as decoration.
#000000 Main site background. Keeps the interface premium, calm and focused. #050706 Modal, cards and heavy surfaces where content needs stronger separation. rgba(255,255,255,0.03) Glass panels, buttons, cards and subtle elevated surfaces. rgba(255,255,255,0.10) Neutral dividers and outlines. Used more often than green borders. #8EFFA8 Only for active states, small highlights, focus details and refined hover states. #3C7A5B Subtle glow, gradients and low-opacity depth. Never used as a dominant fill. rgba(245,248,246,0.96) Primary headings and high-emphasis text. rgba(193,208,197,0.64) Body copy, metadata, labels and supporting text. Spacing & layout
A consistent spatial system keeps the interface breathable and aligned. Three max-widths, four breakpoints and a fluid padding scale – all derived from a base-8 unit grid.
Max-widths
Breakpoints
Padding scale
Typography
Four distinct type roles, each serving a specific function. From the scrambled mono hero to the relaxed body copy – every size and weight choice has a clear reason.
Hero / Role text
PRODUCT DESIGNER
Main headings
Designing digital products
Body copy
I design interfaces, flows and systems that turn ideas into usable products.
Micro labels
AVAILABLE TO WORK
Motion & interactions
Every animation has a purpose – to reinforce hierarchy, communicate state or reward attention. These are the four core motion patterns used across the portfolio.
UI components
Every component shown below exists and is used in production. Each one has a specific purpose, defined interaction states and a consistent visual language aligned with the design system.
Header / Navigation
Main navigation with logo on the left, primary routes in the center and CV action on the right.
Top recruiter banner
Small sticky conversion banner used on strategic pages to communicate availability.
Hero content
First impression of the portfolio: avatar, availability status, animated role and social/contact actions.
Social buttons
Compact hero actions for LinkedIn, GitHub and direct contact.
Contact
Tell me briefly what you need and I'll get back to you by email.
ContactProjectPopup
Main contact flow. Lets users send a project message directly from the interface.
Insert a valid email address.
Animated form input
Premium input used inside the contact form with animated floating label.
Project showcase
Visual grid used to show project previews in a premium editorial way.
Website + Mobile App
Project row actions
Interactive project list item with project name, type and quick links.
Mapping habits, prioritising flows and keeping the UI clean.
Blog expandable card
Blog card used to preview article content before opening the full post.
Case study topbar
Fixed navigation bar present in every case study. Holds breadcrumb navigation and an optional light/dark mode toggle for the page.
DynamicIslandTOC
Floating bottom pill that expands into a code-editor-style table of contents. Used in all newer case studies as the primary in-page navigation.
Understanding the user's context, pain points and needs through qualitative research.
Phase section header
Full-viewport editorial divider between UX phases in case studies. Creates a dramatic, high-contrast transition before the detail sections.
Footer social links
Final navigation and social contact area, visually aligned with hero social icons.
FloatingNav
Sticky pill-shaped navigation bar that floats at the bottom center, providing quick section access within long project pages.
I design interfaces, flows and systems that turn ideas into products.
MagicText scroll reveal
Scroll-triggered animation that fades in each word individually as text enters the viewport, creating a premium reading experience.
Iconography
All icons come from Lucide React, chosen for their consistent stroke weight and clean geometric style. Each icon serves a specific semantic role – none are purely decorative.