papyrus

Back

Profile and CV

What the Papyrus profile data file controls and how profile, print, and export routes share it.

The profile page reads src/data/profile.toml. The same data feeds the web profile page, timeline view, print routes, generated Markdown, and generated JSON.

Keep personal data in this TOML file instead of hardcoding it in components. That makes the site easier to review, export, and print.

User fields

src/data/profile.toml
[user]
name = "Site Author"
avatar = "images/avatar.svg"
bio = "Writer and software engineer"
url = "site.test"
print_color = "#37474F"
email_user = "hello"
email_domain = "site.test"
links = ["linkedin", "github"]
print_links = ["email", "linkedin", "github", "website"]
location = "Lisbon, Portugal"
born = "1991-04-18T00:00:00"
roles = ["Software Engineer", "Technical writer"]
sections = ["about", "experience", "education", "skills"]
toml

Set site-wide avatar treatment in papyrus.config.toml:

papyrus.config.toml
[profile.images]
effect = "tritone"
toml

The site default applies to profile-page images such as the avatar and company or education logos. Use avatar_effect in this file only when one profile should override that site default for the avatar. Supported values are none, duotone, tritone, dither, and dithernoise.

Hide profile tabs per profile with [user.profile_tabs]:

src/data/profile.toml
[user.profile_tabs]
timeline = false
projects = false
toml

Available keys are resume, timeline, projects, and skills. Omitted keys default to visible.

Use email_user and email_domain instead of a single literal email address when you want the page to assemble the visible contact with less obvious static scraping. It is not cryptographic protection; it only avoids the most basic email harvesters.

Each named link can define a display name, base URL, and icon:

src/data/profile.toml
[user.github]
name = "site-owner"
url = "https://github.com/"
icon = "github"

[user.linkedin]
name = "site-owner"
url = "https://www.linkedin.com/in/"
icon = "linkedin"
toml

The web profile can show a broader set of links through links. Print routes can use a smaller set through print_links.

Sections

Sections are declared in [user.data.*]. They can represent about text, experience, education, skills, interests, projects, or any site-specific CV group that follows the same structure.

Date ranges are used for calculated age and experience durations. Items without dates can still appear in the profile, but timeline-style views should only show dated material.

Skills

Skills can be written as tags and prose. Tag-style skills can link naturally to tag pages when the site uses matching post tags. Papyrus only links a skill tag when a public post already has that tag, so the profile does not create dead tag links.

src/data/profile.toml
[user.data.skills.skills.skills]
tags = ["astro", "markdown", "theme", "search"]
description = """-- Astro content collections and static builds.<br>
-- Markdown rendering, callouts, code blocks, and diagrams."""
toml

Keep skill icons optional. If a site uses technology logos, prefer a maintained set such as Devicon or skill-icons, and keep the printable CV mostly text-first. Skill chips should help readers find related writing or projects, not behave like subjective progress bars.

Topic feeds

Papyrus can generate one RSS feed per tag with pnpm run rss-tags. This lets readers subscribe only to the topics they care about, such as release notes, technical posts, or personal notes, without splitting the site into separate blogs.

Export and print

Optional encrypted-contact links can be configured without changing the profile component:

src/data/profile.toml
pgp_key = "https://keys.openpgp.org/search?q=0123456789ABCDEF"
pgp_fingerprint = "0123 4567 89AB CDEF"
toml

Run the export command after editing profile data:

pnpm run cv:export
sh

The command writes public/cv/resume.json and public/cv/profile.md. Web routes use the TOML source. The generated files are useful for sharing, source actions, external review, and tools that understand the JSON Resume shape.

The profile page links to print routes. The modern print route and classic ATS route use the same data, so the site does not maintain multiple resumes by hand.

QR
/posts/profile/

Part of Papyrus docs.