The person behind the portfolio: portfolio.yaml at the site root.
Holds identity for the timeline, CV, and Person JSON-LD — name (or
handle), headline, location, links, avatar. Contact email is off by
default (spam harvesting on public static pages is real); adding
email: is the opt-in. No portfolio.yaml → no portfolio views.
Summary
Types
@type t() :: %Cherry.Portfolio.Profile{ avatar: String.t() | nil, cv: Cherry.CV.Settings.t(), email: String.t() | nil, headline: String.t() | nil, links: [Cherry.Portfolio.Link.t()], location: String.t() | nil, name: String.t(), updated: Date.t() | nil }
Functions
Loads portfolio.yaml from the site root.
Returns {:ok, nil} when the file does not exist — the portfolio is
simply absent, which is not an error.
@spec schema() :: keyword()
The profile schema, for introspection and docs.