Reference

API Documentation

Admin API endpoints for managing portfolio content. All endpoints require admin authentication via Supabase magic-link.

POST/api/admin/upload

Upload files to Supabase storage bucket

Admin required

Body parameters

file—File to upload
bucket—Storage bucket (site-assets, project-media, blog-media, certification-badges, pet-media)
POST/api/admin/blogs

Create a new blog post

Admin required

Body parameters

title—Blog title (required)
excerpt—Short excerpt (required)
readingTime—Reading time in minutes (default: 5 min)
tags—Array of tag strings
featured—Boolean to feature on home
status—draft | published
heroImage—Cover image URL
publishedLabel—Published date label (DD Mon YYYY format)
contentBlocks—Array of content block objects
PATCH/api/admin/blogs/[slug]

Update an existing blog post

Admin required

Body parameters

title—Blog title (required)
excerpt—Short excerpt (required)
readingTime—Reading time in minutes
tags—Array of tag strings
featured—Boolean to feature on home
status—draft | published
heroImage—Cover image URL
publishedLabel—Published date label (DD Mon YYYY format)
contentBlocks—Array of content block objects
DELETE/api/admin/blogs/[slug]

Delete a blog post and its associated media

Admin required

POST/api/admin/projects

Create a new project

Admin required

Body parameters

title—Project title (required)
summary—Project summary (required)
sector—Project sector (required)
yearLabel—Year label like '2024' (required)
role—Your role (required)
stack—Array of tech stack strings
tags—Array of tag strings
featured—Boolean to feature on home
status—draft | published
heroImage—Hero image URL
publishedLabel—Published date label (DD Mon YYYY format)
contentBlocks—Array of content block objects
PATCH/api/admin/projects/[slug]

Update an existing project

Admin required

Body parameters

title—Project title (required)
summary—Project summary (required)
sector—Project sector (required)
yearLabel—Year label
role—Your role (required)
stack—Array of tech stack strings
tags—Array of tag strings
featured—Boolean to feature on home
status—draft | published
heroImage—Hero image URL
publishedLabel—Published date label (DD Mon YYYY format)
contentBlocks—Array of content block objects
DELETE/api/admin/projects/[slug]

Delete a project and its associated media

Admin required

PATCH/api/admin/projects/reorder

Reorder projects by updating sort_order

Admin required

Body parameters

order—Array of slugs in desired order
POST/api/admin/pets

Create a new pet entry

Admin required

PATCH/api/admin/pets/[slug]

Update a pet entry with images and details

Admin required

Body parameters

name—Pet name
species—Species type
description—Short description
story—Detailed story
images—Array of { url, caption, featuredOnHome } objects
DELETE/api/admin/pets/[slug]

Delete a pet entry and its images

Admin required

PATCH/api/admin/pets/reorder

Reorder pets by updating sort_order

Admin required

Body parameters

order—Array of slugs in desired order
POST/api/admin/certifications

Create a new certification entry

Admin required

Body parameters

slug—URL-friendly slug
title—Certification title
issuer—Issuing organization
issueDate—YYYY-MM-DD
note—Optional note
credentialUrl—Verification URL
PATCH/api/admin/certifications/[slug]

Update a certification entry

Admin required

Body parameters

title—Certification title
issuer—Issuing organization
issueDate—YYYY-MM-DD
note—Optional note
credentialUrl—Verification URL
DELETE/api/admin/certifications/[slug]

Delete a certification entry

Admin required

PATCH/api/admin/certifications/reorder

Reorder certifications by updating sort_order

Admin required

Body parameters

order—Array of slugs in desired order
PATCH/api/admin/home-hero

Update homepage hero section settings

Admin required

Body parameters

heroHeading—Main hero heading text
heroSubheading—Hero subheading text
heroIntro—Hero intro paragraph
roleLabel—Role label for snapshot card
location—Location text
availability—Availability status text
howText—How section text
spotifyEmbedUrl—Spotify embed URL
spotifyTitle—Spotify section title
PATCH/api/admin/home-tools

Update tools/skills section content

Admin required

Body parameters

groups—Array of { title, text } objects for tools categories
PATCH/api/admin/home-trajectory

Update work experience and education timeline

Admin required

Body parameters

workExperience—Array of { company, role, period, note } objects
educationItems—Array of { institution, degree, period, note } objects
PATCH/api/admin/home-contact

Update contact information displayed on homepage and footer

Admin required

Body parameters

cta—Call-to-action text
phone—Phone number
email—Contact email
whatsappUrl—WhatsApp link URL
gmailComposeUrl—Gmail compose URL
resumeUrl—Resume download URL
linkedinUrl—LinkedIn profile URL
githubUrl—GitHub profile URL
twitterUrl—X/Twitter profile URL
instagramUrl—Instagram profile URL
dribbbleUrl—Dribbble profile URL
behanceUrl—Behance profile URL