# info.description
Read-only JSON describing Roman Slack's portfolio: projects, rich per-project detail, and hobbies. These are static resources served directly by the site; every endpoint is a plain HTTP GET requiring no authentication.

Versioning: this is API version 1. Every resource is available both unversioned (for example /projects.json) and under the stable /v1 base path (for example /v1/projects.json); the two are identical aliases. Breaking changes ship under a new base path such as /v2, so an integration pinned to /v1 keeps working.

Deprecation policy: when an endpoint is deprecated it continues to respond for at least 6 months and carries the standard Deprecation and Sunset HTTP response headers (RFC 8594) pointing at the replacement. No endpoint is currently deprecated.

Errors: unknown paths and failures return a real 4xx or 5xx status with the typed Error object documented below (a machine-readable code plus a human-readable message), served as application/json.

# servers[].description
Unversioned base path; aliases the current stable version (v1).

# servers[].description
Version 1 (current stable). Breaking changes will ship under a new prefix such as /v2.

# paths./projects.json.get.description
Returns the full array of projects, ordered by id (lower id = more prominent). Each project carries title, description, date (MM-YYYY), category, hours invested, an image or images, and an optional external link.

# paths./project_details.json.get.summary
Rich detail for projects, keyed by project id

# paths./project_details.json.get.description
An object keyed by project id string. Each value adds longDescription, features, techStack, and tags for the matching project in /projects.json.

# components.responses.Error.description
Structured error response. Served as application/json with a machine-readable code and a human-readable message so agents can handle failures without parsing HTML.

# components.schemas.Error.description
Typed error object returned for 4xx and 5xx responses.