Skip to content

Controlling what's public

Your takuhon.json is the complete record. What actually reaches a public reader — the profile page, the API, JSON-LD, the MCP endpoint, the exported CV — is decided by four independent layers — in settings, on individual items, and in meta. A value is public only when all the layers that apply to it allow it (logical AND), and the same projection runs on every surface, so they always agree.

1. Feature toggles — turn whole capabilities on or off

Section titled “1. Feature toggles — turn whole capabilities on or off”

settings.enable* switches entire features:

SettingDefaultEffect
enableJsonLdtrueEmit Schema.org JSON-LD on the page.
enableApitrueExpose the public read API endpoints.
enableAnalyticsfalseOpt-in first-party analytics.

2. Section visibility — hide whole sections

Section titled “2. Section visibility — hide whole sections”

settings.publicVisibility (added in schema 0.6.0) lets you hide an entire content section. Each key is a section name; setting it to false removes that section from every public surface:

{
"settings": {
"publicVisibility": {
"education": false,
"recommendations": false
}
}
}
  • Default is all-visible. An absent key — or an absent publicVisibility block — means the section is public, so older profiles are unaffected.
  • The 16 sections you can toggle are links, careers, projects, skills, certifications, memberships, volunteering, honors, education, publications, languages, courses, patents, testScores, recommendations, and contact.
  • Your profile identity (profile.displayName, avatar, tagline, …) is always public and is intentionally not a toggle. To take a whole profile offline, don’t deploy it (or turn the API off).

3. Item visibility — hide a single entry

Section titled “3. Item visibility — hide a single entry”

<item>.visibility (added in schema 0.7.0) hides one entry within a section that is otherwise public. Set visibility to "private" on any item — a link, a project, a career, … — and that entry is removed from every public surface while its siblings stay:

{
"links": [
{ "id": "site", "type": "website", "url": "https://example.com" },
{
"id": "draft-blog",
"type": "blog",
"url": "https://blog.example.com",
"visibility": "private"
}
]
}
  • Default is public. An absent value — or "visibility": "public" — keeps the item visible, so older profiles are unaffected.
  • Works on items in any of the 15 array sections (links, projects, careers, and so on). Use it for a link you’re not ready to share, a draft project, or any single entry you want to hold back without hiding the whole section.
  • A private item disappears entirely — neither its existence nor the section’s count is leaked.
  • Hiding a whole section (layer 2) supersedes the item check. You still see and edit private items in the admin editor, which loads the full document.

4. Field-level controls — hide specific fields

Section titled “4. Field-level controls — hide specific fields”

Within a visible section, individual fields stay governed by their own flags:

ControlDefaultEffect
contact.showEmailfalseEmail is hidden unless explicitly set to true.
meta.privacy.hideCredentialIdstrueStrips certifications[*].credentialId.
meta.privacy.hideEducationGradestrueStrips education[*].grade.

Hiding a whole section (layer 2) — or marking an item private (layer 3) — supersedes these field checks; a visible item still honors them.

These controls are applied by a single projection in @takuhon/core (section → item → field), so the profile page, /api/profile, /api/jsonld, /takuhon.json, the MCP endpoint, and the derived CV all expose exactly the same content. The admin editor loads the full document from the authenticated export — including items you’ve marked private — so you can always edit them; only the public surfaces strip them. It exposes the feature toggles, a checkbox per section under Public sections, and the field controls; per-item visibility is set on the item directly (a per-item toggle in the form is planned).

For every field and its constraints, see the schema reference.