Brian Kimurgor
Get in touch
Reference · v1.0.0

API Reference.

All data powering this portfolio is available via a public REST API. Public endpoints require an API key. Admin endpoints require a valid session.

Request an API keyDeveloper portal →

Projects

Portfolio projects

GET/api/projects
API key

List all projects

Returns all projects. Filter by status or featured flag.

Parameters
statusqueryIN_PROGRESS | COMPLETED | ARCHIVED
featuredqueryboolean
pagequeryinteger
pageSizequeryinteger
Responses
200OK
GET/api/projects/{slug}
API key

Get a single project by slug

Parameters
slugpathrequiredstring
Responses
200OK
404Not found

Blogs

Blog posts

GET/api/blogs
API key

List published blog posts

Parameters
tagquerystring
pagequeryinteger
pageSizequeryinteger
Responses
200OK
GET/api/blogs/{slug}
API key

Get a single blog post by slug

Parameters
slugpathrequiredstring
Responses
200OK
404Not found

Postmortems

Project postmortems

GET/api/projects/{slug}/postmortem
API key

List postmortems for a project

Parameters
slugpathrequiredstring
Responses
200OK
404Not found
GET/api/projects/{slug}/postmortem/{postmortemId}
API key

Get a single postmortem for a project

Parameters
slugpathrequiredstring
postmortemIdpathrequiredstring
Responses
200OK
404Not found

Education

Education history

GET/api/education
API key

List all education entries

Responses
200OK

Suggestions

Leave a suggestion (public)

POST/api/suggestions
Public

Submit a suggestion

Request body
namestring
emailstring
messagestringrequired
Responses
201Suggestion saved
400Validation error

Mentorship

Apply for mentorship (public)

POST/api/mentorship
Public

Submit a mentorship application

Request body
namestringrequired
emailstringrequired
backgroundstringrequired
goalsstringrequired
experiencestring
Responses
201Application submitted
400Validation error

Companies

Work experience / companies (public)

GET/api/companies
API key

List all work experience entries

Responses
200Array of company entries

Developer API

Request and manage API keys for external developers

POST/api/dev/apply
Public

Request a new API key

Request body
namestringrequired
emailstringrequired
purposestring | null
Responses
201Request received, pending activation
400Missing or invalid fields
409Key already exists for this email
Admin endpoints

All routes below require a valid admin session cookie obtained via POST /api/auth/signin.

Admin – Projects

Admin: manage projects (auth required)

GET/api/admin/projects/{id}/postmortem
Admin

List postmortems for a project (admin)

Parameters
idpathrequiredstring
Responses
200OK
401Unauthorized
404Not found
POST/api/admin/projects/{id}/postmortem
Admin

Create a postmortem for a project

Parameters
idpathrequiredstring
Request body
titlestringrequired
summarystringrequired
whatWorkedstringrequired
whatFailedstringrequired
lessonsstringrequired
Responses
201Created
400Validation error
401Unauthorized
404Project not found
GET/api/admin/projects/{id}/postmortem/{postmortemId}
Admin

Get a single postmortem for a project (admin)

Parameters
idpathrequiredstring
postmortemIdpathrequiredstring
Responses
200OK
401Unauthorized
404Not found
PUT/api/admin/projects/{id}/postmortem/{postmortemId}
Admin

Update a postmortem

Parameters
idpathrequiredstring
postmortemIdpathrequiredstring
Request body
titlestring
summarystring
whatWorkedstring
whatFailedstring
lessonsstring
Responses
200Updated
401Unauthorized
404Not found
DELETE/api/admin/projects/{id}/postmortem/{postmortemId}
Admin

Delete a postmortem

Parameters
idpathrequiredstring
postmortemIdpathrequiredstring
Responses
204Deleted
401Unauthorized
404Not found
GET/api/admin/projects
Admin

List all projects (admin)

Responses
200OK
401Unauthorized
POST/api/admin/projects
Admin

Create a project

Request body
titlestringrequired
slugstringrequired
descriptionstringrequired
techStackstring[]required
liveUrlstring
repoUrlstring
statusstringrequired
featuredboolean
yearintegerrequired
Responses
201Created
400Validation error
401Unauthorized
PUT/api/admin/projects/{id}
Admin

Update a project

Parameters
idpathrequiredstring
Responses
200Updated
401Unauthorized
404Not found
DELETE/api/admin/projects/{id}
Admin

Delete a project

Parameters
idpathrequiredstring
Responses
204Deleted
401Unauthorized
404Not found

Admin – Blogs

Admin: manage blog posts (auth required)

GET/api/admin/blogs
Admin

List all blog posts including drafts (admin)

Responses
200OK
401Unauthorized
POST/api/admin/blogs
Admin

Create a blog post

Request body
titlestringrequired
slugstringrequired
excerptstringrequired
contentstringrequired
coverImagestring
tagsstring[]
publishedboolean
Responses
201Created
400Validation error
401Unauthorized
PUT/api/admin/blogs/{id}
Admin

Update a blog post

Parameters
idpathrequiredstring
Responses
200Updated
401Unauthorized
404Not found
DELETE/api/admin/blogs/{id}
Admin

Delete a blog post

Parameters
idpathrequiredstring
Responses
204Deleted
401Unauthorized
404Not found

Admin – Education

Admin: manage education entries (auth required)

GET/api/admin/education
Admin

List education entries (admin)

Responses
200OK
401Unauthorized
POST/api/admin/education
Admin

Create an education entry

Request body
institutionstringrequired
degreestringrequired
fieldstringrequired
startYearintegerrequired
endYearinteger
currentboolean
descriptionstring
orderinteger
Responses
201Created
400Validation error
401Unauthorized
PUT/api/admin/education/{id}
Admin

Update an education entry

Parameters
idpathrequiredstring
Responses
200Updated
401Unauthorized
404Not found
DELETE/api/admin/education/{id}
Admin

Delete an education entry

Parameters
idpathrequiredstring
Responses
204Deleted
401Unauthorized
404Not found

Admin – Suggestions

Admin: read and manage suggestions (auth required)

GET/api/admin/suggestions
Admin

List all suggestions

Responses
200Array of suggestions
401Unauthorized
PATCH/api/admin/suggestions/{id}
Admin

Mark suggestion read/unread

Parameters
idpathrequiredstring
Request body
readboolean
Responses
200Updated suggestion
401Unauthorized
DELETE/api/admin/suggestions/{id}
Admin

Delete a suggestion

Parameters
idpathrequiredstring
Responses
200Deleted
401Unauthorized

Admin – Mentorship

Admin: review mentorship applications (auth required)

GET/api/admin/mentorship
Admin

List all mentorship applications

Responses
200Array of applications
401Unauthorized
PATCH/api/admin/mentorship/{id}
Admin

Update application status

Parameters
idpathrequiredstring
Request body
statusstring
Responses
200Updated application
400Invalid status
401Unauthorized
DELETE/api/admin/mentorship/{id}
Admin

Delete an application

Parameters
idpathrequiredstring
Responses
200Deleted
401Unauthorized

Admin – Companies

Admin: manage work experience entries (auth required)

GET/api/admin/companies
Admin

List all companies

Responses
200Array of companies
401Unauthorized
POST/api/admin/companies
Admin

Create a company entry

Request body
namestringrequired
rolestringrequired
startDatestringrequired
endDatestring | null
currentboolean
descriptionstring | null
logoUrlstring | null
orderinteger
Responses
201Created
400Missing required fields
401Unauthorized
PUT/api/admin/companies/{id}
Admin

Update a company entry

Parameters
idpathrequiredstring
Responses
200Updated
401Unauthorized
DELETE/api/admin/companies/{id}
Admin

Delete a company entry

Parameters
idpathrequiredstring
Responses
200Deleted
401Unauthorized

Admin – API Keys

Admin: manage developer API keys (auth required)

GET/api/admin/apikeys
Admin

List all API key requests

Responses
200Array of API keys
401Unauthorized
PATCH/api/admin/apikeys/{id}
Admin

Update status or rate limit of a key

Parameters
idpathrequiredstring
Request body
statusstring
rateLimitinteger
Responses
200Updated key
400Invalid status
401Unauthorized
DELETE/api/admin/apikeys/{id}
Admin

Delete an API key

Parameters
idpathrequiredstring
Responses
200Deleted
401Unauthorized