feat: publish HoloLake model-native living system source

This commit is contained in:
冰朔 2026-08-03 10:04:41 +08:00
commit c395dd3a99
2467 changed files with 615073 additions and 0 deletions

View file

@ -0,0 +1,119 @@
import { defineConfig } from "vitepress";
const base = process.env.VITEPRESS_BASE ?? "/";
export default defineConfig({
title: "Tolaria",
description:
"Tolaria is a local-first Markdown knowledge base with native relationships, Git history, and AI workflows.",
base,
ignoreDeadLinks: [/^\/download\/?(?:index)?$/, /^\/releases\/?(?:index)?$/],
cleanUrls: true,
head: [
["link", { rel: "icon", type: "image/png", href: `${base}landing/favicon.png` }],
["meta", { property: "og:title", content: "Tolaria" }],
[
"meta",
{
property: "og:description",
content:
"A second brain for the AI era. Free forever, local-first, Markdown-based, Git-ready, and AI-friendly.",
},
],
],
themeConfig: {
logo: { src: "/landing/tolaria-icon.png", alt: "Tolaria" },
nav: [
{ text: "Start", link: "/start/install" },
{ text: "Concepts", link: "/concepts/vaults" },
{ text: "Guides", link: "/guides/capture-a-note" },
{ text: "Templates", link: "/templates/portent" },
{ text: "Downloads", link: "https://tolaria.md/download/", target: "_self", noIcon: true },
],
search: {
provider: "local",
},
sidebar: [
{
text: "Start Here",
items: [
{ text: "Install Tolaria", link: "/start/install" },
{ text: "First Launch", link: "/start/first-launch" },
{ text: "Getting Started Vault", link: "/start/getting-started-vault" },
{ text: "Open Or Create A Vault", link: "/start/open-or-create-vault" },
],
},
{
text: "Concepts",
items: [
{ text: "Vaults", link: "/concepts/vaults" },
{ text: "Notes", link: "/concepts/notes" },
{ text: "Editor", link: "/concepts/editor" },
{ text: "Spreadsheets", link: "/concepts/spreadsheets" },
{ text: "Properties", link: "/concepts/properties" },
{ text: "Types", link: "/concepts/types" },
{ text: "Relationships", link: "/concepts/relationships" },
{ text: "Files And Media", link: "/concepts/files-and-media" },
{ text: "Inbox", link: "/concepts/inbox" },
{ text: "Git", link: "/concepts/git" },
{ text: "AI", link: "/concepts/ai" },
],
},
{
text: "Guides",
items: [
{ text: "Capture A Note", link: "/guides/capture-a-note" },
{ text: "Organize The Inbox", link: "/guides/organize-inbox" },
{ text: "Use Wikilinks", link: "/guides/use-wikilinks" },
{ text: "Use Spreadsheets", link: "/guides/use-spreadsheets" },
{ text: "Create Types", link: "/guides/create-types" },
{ text: "Build Custom Views", link: "/guides/build-custom-views" },
{ text: "Connect A Git Remote", link: "/guides/connect-a-git-remote" },
{ text: "Manage Git", link: "/guides/commit-and-push" },
{ text: "Use The AI", link: "/guides/use-ai-panel" },
{ text: "Configure AI Models", link: "/guides/configure-ai-models" },
{ text: "Use The Table Of Contents", link: "/guides/use-table-of-contents" },
{ text: "Use Media Previews", link: "/guides/use-media-previews" },
{ text: "Manage Display Preferences", link: "/guides/manage-display-preferences" },
{ text: "Use The Command Palette", link: "/guides/use-command-palette" },
],
},
{
text: "Templates",
items: [
{ text: "Portent", link: "/templates/portent" },
],
},
{
text: "Reference",
items: [
{ text: "Supported Platforms", link: "/reference/supported-platforms" },
{ text: "File Layout", link: "/reference/file-layout" },
{ text: "Frontmatter Fields", link: "/reference/frontmatter-fields" },
{ text: "Spreadsheet File Format", link: "/reference/spreadsheet-format" },
{ text: "Spreadsheet Formulas", link: "/reference/spreadsheet-functions" },
{ text: "View Filters", link: "/reference/view-filters" },
{ text: "Keyboard Shortcuts", link: "/reference/keyboard-shortcuts" },
{ text: "Release Channels", link: "/reference/release-channels" },
{ text: "Contribute", link: "/reference/contribute" },
{ text: "Docs Maintenance", link: "/reference/docs-maintenance" },
],
},
{
text: "Troubleshooting",
items: [
{ text: "Vault Not Loading", link: "/troubleshooting/vault-not-loading" },
{ text: "Git Authentication", link: "/troubleshooting/git-auth" },
{ text: "AI Agent Not Found", link: "/troubleshooting/ai-agent-not-found" },
{ text: "Model Provider Connection", link: "/troubleshooting/model-provider-connection" },
{ text: "Sync Conflicts", link: "/troubleshooting/sync-conflicts" },
],
},
],
footer: {
message: "Free and open source. Local-first, Git-first, and Markdown-based.",
copyright:
"Tolaria is AGPL-3.0-or-later. The Tolaria name and logo remain covered by the project trademark policy.",
},
},
});

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,212 @@
<script setup lang="ts">
import DefaultTheme from "vitepress/theme";
import { onBeforeUnmount, onMounted, ref, watchEffect } from "vue";
import { useData } from "vitepress";
const { frontmatter } = useData();
const fallbackGithubStars = "9,946";
const githubStars = ref(fallbackGithubStars);
const githubStarsCacheKey = "tolaria:github-stars";
const githubStarsCacheTtlMs = 60 * 60 * 1000;
const githubRepoApiUrl = "https://api.github.com/repos/refactoringhq/tolaria";
type GithubStarsCache = {
stars: number;
savedAt: number;
};
const formatGithubStars = (stars: number) =>
new Intl.NumberFormat("en-US").format(stars);
const scrollClass = "tolaria-scrolled";
const landingPageClass = "tolaria-landing-page";
const updateScrollClass = () => {
document.documentElement.classList.toggle(scrollClass, window.scrollY > 8);
};
const readCachedGithubStars = (): GithubStarsCache | null => {
try {
const rawCache = window.localStorage.getItem(githubStarsCacheKey);
if (!rawCache) {
return null;
}
const parsedCache = JSON.parse(rawCache) as Partial<GithubStarsCache>;
if (
typeof parsedCache.stars !== "number" ||
typeof parsedCache.savedAt !== "number" ||
!Number.isFinite(parsedCache.stars) ||
!Number.isFinite(parsedCache.savedAt)
) {
return null;
}
return {
stars: parsedCache.stars,
savedAt: parsedCache.savedAt,
};
} catch {
return null;
}
};
const updateGithubStars = async () => {
const cachedStars = readCachedGithubStars();
if (cachedStars) {
githubStars.value = formatGithubStars(cachedStars.stars);
if (Date.now() - cachedStars.savedAt < githubStarsCacheTtlMs) {
return;
}
}
try {
const response = await fetch(githubRepoApiUrl, {
headers: { Accept: "application/vnd.github+json" },
});
if (!response.ok) {
return;
}
const repo = (await response.json()) as { stargazers_count?: unknown };
if (
typeof repo.stargazers_count !== "number" ||
!Number.isFinite(repo.stargazers_count)
) {
return;
}
window.localStorage.setItem(
githubStarsCacheKey,
JSON.stringify({
stars: repo.stargazers_count,
savedAt: Date.now(),
} satisfies GithubStarsCache),
);
githubStars.value = formatGithubStars(repo.stargazers_count);
} catch {
// Keep the cached or bundled fallback count.
}
};
watchEffect(() => {
if (typeof document === "undefined") {
return;
}
document.documentElement.classList.toggle(
landingPageClass,
Boolean(frontmatter.value.landing),
);
});
onMounted(() => {
updateScrollClass();
void updateGithubStars();
window.addEventListener("scroll", updateScrollClass, { passive: true });
});
onBeforeUnmount(() => {
window.removeEventListener("scroll", updateScrollClass);
document.documentElement.classList.remove(scrollClass);
document.documentElement.classList.remove(landingPageClass);
});
</script>
<template>
<div :class="{ 'tolaria-landing-shell': frontmatter.landing }">
<DefaultTheme.Layout>
<template #nav-bar-content-after>
<a
class="github-star-widget"
href="https://github.com/refactoringhq/tolaria"
target="_blank"
rel="noreferrer"
:aria-label="`${githubStars} GitHub stars`"
>
<svg viewBox="0 0 24 24" aria-hidden="true">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12 .5C5.65.5.5 5.65.5 12c0 5.09 3.29 9.39 7.86 10.91.58.1.79-.25.79-.56v-2c-3.2.7-3.88-1.54-3.88-1.54-.52-1.33-1.28-1.68-1.28-1.68-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.03 1.76 2.7 1.25 3.36.96.1-.75.4-1.25.73-1.54-2.55-.29-5.23-1.28-5.23-5.68 0-1.25.45-2.28 1.19-3.08-.12-.29-.52-1.46.11-3.04 0 0 .97-.31 3.17 1.18A11 11 0 0 1 12 5.53c.98 0 1.97.13 2.89.39 2.2-1.49 3.17-1.18 3.17-1.18.63 1.58.23 2.75.11 3.04.74.8 1.19 1.83 1.19 3.08 0 4.41-2.69 5.38-5.25 5.67.41.36.78 1.06.78 2.14v3.18c0 .31.21.67.79.56A11.51 11.51 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"
/>
</svg>
<span>Star</span>
<strong>{{ githubStars }}</strong>
</a>
</template>
</DefaultTheme.Layout>
</div>
</template>
<style scoped>
.github-star-widget {
display: inline-flex;
align-items: center;
gap: 7px;
height: 34px;
margin-left: 8px;
padding: 0 10px;
border: 1px solid var(--vp-c-border);
border-radius: 7px;
color: var(--vp-c-text-1);
background: var(--vp-c-bg-soft);
font-size: 13px;
font-weight: 700;
line-height: 1;
text-decoration: none;
transition:
border-color 160ms ease,
background-color 160ms ease,
color 160ms ease;
}
.github-star-widget:hover {
color: var(--vp-c-brand-1);
border-color: color-mix(in srgb, var(--vp-c-brand-1) 38%, var(--vp-c-border));
}
.github-star-widget svg {
width: 18px;
height: 18px;
fill: currentColor;
}
.github-star-widget strong {
padding-left: 7px;
border-left: 1px solid var(--vp-c-border);
font-weight: 800;
}
@media (min-width: 1280px) {
.github-star-widget {
order: 1;
}
:global(.VPNavBar .appearance) {
order: 2;
}
}
@media (max-width: 767px) {
.github-star-widget {
height: 32px;
margin-left: 4px;
padding: 0 7px;
font-size: 12px;
}
.github-star-widget svg {
width: 17px;
height: 17px;
}
.github-star-widget span {
display: none;
}
.github-star-widget strong {
padding-left: 0;
border-left: 0;
}
}
</style>

View file

@ -0,0 +1,12 @@
import DefaultTheme from "vitepress/theme";
import LandingHome from "./LandingHome.vue";
import Layout from "./Layout.vue";
import "./styles.css";
export default {
extends: DefaultTheme,
Layout,
enhanceApp({ app }) {
app.component("LandingHome", LandingHome);
},
};

View file

@ -0,0 +1,240 @@
@font-face {
font-family: "RefactoringSans";
src: url("./assets/RefactoringSans.otf") format("opentype");
font-display: swap;
font-style: normal;
font-weight: 400 900;
}
:root {
--vp-font-family-base:
"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
--vp-font-family-mono: "SF Mono", "Fira Code", ui-monospace, monospace;
--tolaria-font-brand:
"RefactoringSans", "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
--tolaria-bg: #faf9f5;
--tolaria-surface: #ffffff;
--tolaria-surface-muted: #f7f6f3;
--tolaria-text: #1a1a18;
--tolaria-text-secondary: #6b6b60;
--tolaria-text-muted: #9b9b90;
--tolaria-border: #e5e5e0;
--tolaria-blue: #155dff;
--tolaria-blue-hover: #4a5ad6;
--tolaria-blue-soft: #e8eeff;
--vp-c-bg: var(--tolaria-surface);
--vp-c-bg-alt: var(--tolaria-surface-muted);
--vp-c-bg-elv: var(--tolaria-surface);
--vp-c-bg-soft: var(--tolaria-surface-muted);
--vp-c-text-1: var(--tolaria-text);
--vp-c-text-2: var(--tolaria-text-secondary);
--vp-c-text-3: var(--tolaria-text-muted);
--vp-c-border: var(--tolaria-border);
--vp-c-divider: var(--tolaria-border);
--vp-c-brand-1: var(--tolaria-blue);
--vp-c-brand-2: var(--tolaria-blue-hover);
--vp-c-brand-3: var(--tolaria-blue);
--vp-c-brand-soft: var(--tolaria-blue-soft);
--vp-button-brand-bg: var(--tolaria-blue);
--vp-button-brand-hover-bg: var(--tolaria-blue-hover);
--vp-button-brand-border: var(--tolaria-blue);
--vp-code-bg: #eeeeea;
--vp-code-color: var(--tolaria-text-secondary);
}
.dark {
--tolaria-bg: #1f1e1b;
--tolaria-surface: #23221f;
--tolaria-surface-muted: #191814;
--tolaria-text: #e6e1d8;
--tolaria-text-secondary: #b8b1a6;
--tolaria-text-muted: #7f776d;
--tolaria-border: #34322d;
--tolaria-blue: #78a4ff;
--tolaria-blue-hover: #9bbeff;
--tolaria-blue-soft: rgba(120, 164, 255, 0.16);
--vp-c-bg: #1f1e1b;
--vp-c-bg-alt: #191814;
--vp-c-bg-elv: #23221f;
--vp-c-bg-soft: #23221f;
--vp-c-text-1: #e6e1d8;
--vp-c-text-2: #b8b1a6;
--vp-c-text-3: #7f776d;
--vp-c-border: #34322d;
--vp-c-divider: #34322d;
--vp-c-brand-1: #78a4ff;
--vp-c-brand-2: #9bbeff;
--vp-c-brand-3: #78a4ff;
--vp-c-brand-soft: rgba(120, 164, 255, 0.16);
--vp-code-bg: #2d2b27;
--vp-code-color: #d8d1c6;
}
html,
body,
#app {
background: var(--vp-c-bg);
}
html.tolaria-landing-page,
html.tolaria-landing-page body,
html.tolaria-landing-page #app {
background: var(--tolaria-bg);
}
.VPNavBarTitle .logo {
width: auto;
height: 28px;
}
.VPNavBarTitle .title {
color: var(--vp-c-text-1);
font-family: var(--tolaria-font-brand);
font-size: 22px;
font-weight: 800;
letter-spacing: 0;
}
.tolaria-landing-shell {
--vp-c-bg: var(--tolaria-bg);
--vp-nav-bg-color: var(--tolaria-bg);
}
.tolaria-landing-shell .VPNav,
.tolaria-landing-shell .VPNavBar,
.tolaria-landing-shell .VPNavBar:not(.has-sidebar):not(.home.top),
.tolaria-landing-shell .VPNavBar:not(.home.top) .content-body,
.tolaria-landing-shell .VPNavBar .content-body {
background: var(--tolaria-bg);
background-color: var(--tolaria-bg);
backdrop-filter: blur(14px);
}
.tolaria-landing-shell .VPNavBar .wrapper,
.tolaria-landing-shell .VPNavBar .container {
width: min(100%, 1280px);
max-width: 1280px;
margin-right: auto;
margin-left: auto;
}
.tolaria-landing-shell .VPNavBar .wrapper {
padding-right: 20px;
padding-left: 20px;
}
.tolaria-landing-shell .landing-container {
width: min(100%, 1280px);
}
@media (min-width: 768px) {
.tolaria-landing-shell .VPNavBar .wrapper {
padding-right: 40px;
padding-left: 40px;
}
}
.tolaria-landing-shell .VPNavBar .divider,
.tolaria-landing-shell .VPNavBar .divider-line {
display: none;
background-color: transparent;
}
.tolaria-landing-shell .VPNavBar .divider-line {
opacity: 0;
transition: opacity 160ms ease;
}
.VPNavBar {
position: relative;
z-index: calc(var(--vp-z-index-nav) + 2);
}
.tolaria-landing-shell .VPLocalNav {
display: none;
}
.VPNavScreen {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
bottom: auto !important;
height: calc(100vh - var(--vp-nav-height) - var(--vp-layout-top-height, 0px)) !important;
z-index: calc(var(--vp-z-index-nav) + 1);
background: var(--vp-c-bg);
}
.tolaria-scrolled .tolaria-landing-shell .VPNav {
box-shadow: 0 10px 24px rgba(26, 26, 24, 0.06);
}
.tolaria-scrolled .tolaria-landing-shell .VPNavBar .divider-line {
opacity: 1;
}
.DocSearch-Button {
border-radius: 999px;
}
.tolaria-landing-shell .DocSearch-Button {
border: 1px solid var(--tolaria-border);
background: var(--tolaria-surface);
}
.vp-doc h1,
.vp-doc h2,
.vp-doc h3 {
letter-spacing: 0;
}
.vp-doc a,
.VPNavBarMenuLink.active,
.VPLink.active {
color: var(--vp-c-brand-1);
}
.vp-doc table {
display: table;
width: 100%;
}
.vp-doc th {
color: var(--vp-c-text-1);
background: var(--vp-c-bg-soft);
}
.vp-doc td,
.vp-doc th {
border-color: var(--vp-c-divider);
}
.tolaria-landing-shell .VPContent,
.tolaria-landing-shell .VPPage,
.tolaria-landing-shell .VPDoc,
.tolaria-landing-shell .VPDoc .container,
.tolaria-landing-shell .VPDoc .content,
.tolaria-landing-shell .VPDoc .content-container,
.tolaria-landing-shell .VPDoc .main,
.tolaria-landing-shell .vp-doc {
max-width: none;
padding: 0;
margin: 0;
}
@media (min-width: 960px) {
.tolaria-landing-shell .VPContent {
padding-top: var(--vp-nav-height);
}
}
.tolaria-landing-shell .vp-doc > div {
width: 100%;
}
.tolaria-landing-shell .vp-doc a {
text-decoration: none;
}
.tolaria-landing-shell .VPFooter {
display: none;
}

View file

@ -0,0 +1,32 @@
# AI
HoloLake Era has two AI paths: coding agents that can use tools to inspect and edit a vault, and direct model targets that answer in chat mode from note context.
## Coding Agents
The AI panel can stream supported local CLI agents through HoloLake Era's normalized event layer. Current targets include Claude Code, Codex, OpenCode, Pi, and Antigravity CLI when they are installed on the machine.
Coding agents can run in:
- **Vault Safe** mode, limited to file, search, and edit tools.
- **Power User** mode, which can allow local shell commands scoped to the active vault for agents that support shell access.
## Direct Models
Direct model targets run in chat mode. They receive the active note, linked context, and conversation history, but they do not receive vault-write tools or shell access.
Supported provider shapes include:
- Local models through Ollama or LM Studio.
- Hosted providers such as OpenAI, Anthropic, Gemini, and OpenRouter.
- Custom OpenAI-compatible endpoints.
## External MCP Setup
HoloLake Era exposes an MCP server for external tools. The setup flow can write HoloLake Era's MCP entry into Claude Code, Antigravity CLI, Cursor, and a generic MCP config path, and it can also copy the exact JSON snippet for manual setup.
MCP setup is explicit. Closing the dialog leaves third-party config files untouched.
## Why Git Matters For AI
AI-generated changes should be inspectable. Git gives you diffs, history, rollback, and a clear boundary between suggestions and committed work.

View file

@ -0,0 +1,23 @@
# Editor
HoloLake Era offers a rich editor for daily writing and a raw Markdown mode for exact file control. Both modes write back to the same Markdown file.
## Rich Editing
The rich editor supports blocks, slash commands, wikilinks, tables, code blocks, images, Mermaid diagrams, LaTeX-style math, and markdown-backed whiteboards.
Use it when you want to write and reorganize quickly without thinking about Markdown syntax.
## Raw Mode
Raw mode shows the Markdown source directly. Use it when you need to edit YAML frontmatter, repair unusual Markdown, or make an exact text change.
Toggle raw mode with `Cmd+\` on macOS or `Ctrl+\` on Windows and Linux.
## Table Of Contents
The table of contents panel builds an outline from headings in the current note. It is useful for long notes, procedures, research files, and generated documents. Toggle it with `Cmd+Shift+T` on macOS or `Ctrl+Shift+T` on Windows and Linux.
## Width
Notes can use normal or wide editor width. Set the default in Settings, or override an individual note from the editor toolbar.

View file

@ -0,0 +1,34 @@
# Files And Media
HoloLake Era starts with Markdown notes, but a vault can also contain images, PDFs, media files, whiteboards, and other local files.
## Mermaid Diagrams
Use Mermaid code blocks when a note needs a diagram that should stay plain text and versionable.
````md
```mermaid
flowchart LR
Idea --> Draft --> Review --> Publish
```
````
HoloLake Era renders Mermaid diagrams in the editor while keeping the source in Markdown.
## Attachments
Images pasted into the editor are saved into the vault as normal files. They remain portable and can be opened by other tools.
## Previews
HoloLake Era can preview common image files, PDFs, and supported media files in the app. Files without an in-app preview can still be opened in the default system app.
Settings control whether PDFs, images, and unsupported files appear in All Notes. Folder browsing still shows files in their folders.
## Whiteboards
Whiteboards use tldraw in the editor, but their durable representation stays in Markdown. That keeps them inside the vault and versioned by Git with the rest of your notes.
## Git Boundary
If generated or local-only files are ignored by Git, HoloLake Era can hide them from notes, search, quick open, and folders. Use this when build artifacts or private local files should not behave like vault content.

View file

@ -0,0 +1,29 @@
# Git
Git is HoloLake Era's recommended history and sync layer. HoloLake Era can work with plain Markdown folders, and Git unlocks local history, recovery, remote backup, and multi-device workflows when you want them.
HoloLake Era acts as a lightweight Git client for your vault. You can review changes, commit, pull, push, and inspect history without leaving the app.
## What HoloLake Era Uses Git For
- Whole-vault commit history.
- Current diff for the vault.
- Per-note history.
- Current diff for an individual note.
- Pull and push.
- Conflict detection and resolution.
- Remote connection for local-only vaults.
## History And Diffs
Each note can show its own history and current diff, so you can understand how that file changed over time or what is unsaved relative to Git.
HoloLake Era also shows a history of the whole vault. Use it when you want to review broader changes across multiple notes before committing or syncing.
## Local Commits
You can commit changes inside HoloLake Era without leaving the app. This gives you useful restore points even before a remote is configured.
## Remotes
Connect a compatible Git remote when you want sync or backup. HoloLake Era relies on your system Git authentication, so GitHub CLI, SSH keys, credential helpers, and existing Git configuration can continue to work.

View file

@ -0,0 +1,23 @@
# Inbox
The Inbox is for notes that have been captured but not yet organized.
## Why It Exists
Fast capture should not require perfect structure. The Inbox gives you a place to put incomplete notes, then process them later.
The Inbox workflow is optional. Turn it off in Settings > Workflow if you prefer every note to appear organized by default.
## Organizing Inbox Notes
When reviewing the Inbox:
1. Give the note a clear H1.
2. Set its `type`.
3. Add status, dates, or URL if useful.
4. Add relationships with wikilinks or frontmatter fields.
5. Move it into a folder only if the folder adds value.
## Healthy Inbox Habit
Keep the Inbox small enough that it can be reviewed in one focused pass. HoloLake Era works best when capture is fast and organization is deliberate.

View file

@ -0,0 +1,36 @@
# Notes
A note is a Markdown file with optional YAML frontmatter. HoloLake Era reads the first H1 as the primary title and keeps the file on disk as the durable representation.
## Anatomy
```md
---
type: Project
status: Active
belongs_to:
- "[[workspace]]"
---
# Launch Documentation
Draft the public HoloLake Era docs and keep them close to code changes.
```
## Titles
The first H1 is the note title. HoloLake Era uses that title wherever the note is displayed: note lists, search results, wikilink suggestions, relationship pickers, tabs, and window titles.
The title is separate from the filename. The filename stays visible in the breadcrumb so you can see the file on disk, and you can rename it independently when needed.
Use the breadcrumb action to rename the file to match the title. New untitled notes can also auto-rename from the first H1 the first time they get a real title. Turn this behavior off in Settings > Vault Content > Titles & Filenames if you prefer filenames to stay unchanged until you rename them manually.
## Body Links
Use `[[wikilinks]]` to connect notes from the body. HoloLake Era shows autocomplete suggestions while you type, and links can resolve by filename or title.
## Frontmatter
Use frontmatter for structured fields such as type, status, date, URL, and relationships. Keep free-form thinking in the body.
Some notes can be displayed with specialized editors while keeping the same file-first model. A note with `_display: sheet` opens as a spreadsheet and stores its cells in a CSV-like body, while `type` remains available for organization. See [Spreadsheets](/concepts/spreadsheets).

View file

@ -0,0 +1,26 @@
# Properties
Properties are frontmatter fields that HoloLake Era can display, filter, and edit.
## Suggested Properties
Suggested properties are the fields HoloLake Era knows how to create quickly from the Properties panel. When a suggested property is missing, the panel shows a shortcut to add it with the right editor.
| Field | Purpose |
| --- | --- |
| `type` | Groups the note into a type such as Project, Person, or Topic. |
| `status` | Tracks lifecycle state such as Active, Done, or Blocked. |
| `url` | Stores a canonical external link. |
| `date` | Represents a single date. |
## System Properties
Fields that start with `_` are system properties. They remain in plain text but are hidden from normal property editing.
Examples include `_icon`, `_color`, `_order`, `_sidebar_label`, `_width`, and `_pinned_properties` on type documents or notes.
## Property Editing
The Properties panel is the safest place to edit structured properties. Toggle it with `Cmd+Shift+I` on macOS or `Ctrl+Shift+I` on Windows and Linux.
Date fields use HoloLake Era's picker, relationship fields can use wikilinks, and raw Markdown mode is available when you need direct control over YAML.

View file

@ -0,0 +1,32 @@
# Relationships
Relationships make a vault feel like a graph instead of a pile of documents.
## Relationship Fields
Any frontmatter field containing wikilinks can become a relationship. Relationship fields can point to one note or to an array of notes.
```yaml
belongs_to:
- "[[product-work]]"
related_to:
- "[[documentation]]"
- "[[editor-research]]"
blocked_by:
- "[[release-process]]"
- "[[sync-conflicts]]"
```
HoloLake Era supports default relationship fields out of the box: `belongs_to`, `has`, and `related_to`. It also detects custom relationship fields dynamically when they contain wikilinks.
Default relationships have automatically computed inverses. If a note says it `belongs_to` a project, the project can show that note under its inverse `has` relationship without you writing the reverse link by hand. `related_to` works as a lateral relationship in both directions.
These outgoing and inverse relationships appear in the Properties panel and in Neighborhood mode, where the note list becomes a graph view around the selected note.
## Body Links Versus Relationship Fields
Use body links when the relationship appears naturally in writing. Use frontmatter relationships when the connection is important enough to show in navigation, filters, Neighborhood mode, or the Properties panel.
## Backlinks
HoloLake Era can show incoming links and inverse relationships, making it easier to navigate from a note to the rest of its context.

View file

@ -0,0 +1,138 @@
# Spreadsheets
HoloLake Era sheets are spreadsheet notes. They keep the same file-first model as other notes, but a note with `_display: sheet` opens in a spreadsheet editor instead of the rich text editor. The note's `type` remains available for organization.
The durable file is still Markdown with YAML frontmatter. The body is CSV-like text containing cell inputs and formulas, and spreadsheet presentation state is stored as plain YAML under `_sheet`.
## Read Next
- [Use Spreadsheets](/guides/use-spreadsheets) for the editing workflow.
- [Spreadsheet File Format](/reference/spreadsheet-format) for the plain-text storage contract.
- [Spreadsheet Formulas](/reference/spreadsheet-functions) for formula syntax, autocomplete, and IronCalc function families.
## Why Sheet Notes
Sheets are useful when information is better modeled as rows, columns, and formulas than as prose. Examples include budgets, revenue models, inventories, editorial calendars, lightweight trackers, and analytical scratchpads.
HoloLake Era does not store sheets as opaque workbook binaries. A sheet should remain:
- readable in a text editor
- diffable in Git
- editable by humans and AI agents
- available offline
- connected to the rest of the vault through types, properties, relationships, and wikilinks
## One Note, One Sheet
A sheet note is a single sheet. HoloLake Era does not expose multiple tabs inside one note.
When a model needs more than one table, create more than one sheet note and connect them with wikilinks or cross-sheet formulas. This keeps each file small, legible, and aligned with HoloLake Era's graph model.
For example:
- `newsletter-revenue.md`
- `sponsorship-pipeline.md`
- `refactoring-business-plan.md`
Each can be a normal `_display: sheet` note, and formulas can reference cells in another sheet note with HoloLake Era's wikilink cell syntax.
## Editing
The interactive sheet editor is backed by IronCalc. HoloLake Era uses IronCalc for spreadsheet behavior and formula evaluation, then adapts the workbook back to HoloLake Era's plain-text note format.
In the sheet editor:
- cell inputs that start with `=` are formulas
- non-formula cells can contain normal text, numbers, dates, and `[[wikilinks]]`
- typing `[[` in a cell opens the same note autocomplete concept used elsewhere in HoloLake Era
- typing a formula function name opens inline formula autocomplete for the bundled IronCalc function catalog
- right-clicking a selection exposes core formatting controls such as number formats, decimal precision, bold, italic, and clear formatting
Keyboard basics follow spreadsheet conventions:
- arrow keys move the active cell
- `Shift` with arrows extends the selection
- `Enter` starts editing the active cell
- `Escape` exits cell editing while keeping focus in the sheet
- `Delete` or `Backspace` clears the selected range
- copy and paste should preserve formulas, including HoloLake Era cross-sheet references
## Wikilinks In Cells
Wikilinks in non-formula cells are stored as normal HoloLake Era wikilinks:
```csv
Project,Owner,Status
[[website-redesign]],[[person/alice]],Active
[[sponsorship-pipeline]],[[person/matteo]],Review
```
The cell still behaves like a spreadsheet cell, but the value remains a vault link that HoloLake Era can understand.
## Note Reference Formulas
HoloLake Era adds a sheet-note reference syntax on top of IronCalc formulas:
```txt
=[[newsletter-revenue]].B5
=SUM(B2:D2)+[[sponsorship-pipeline]].E12
=[[refactoring-business-plan]].$C$18
```
The target before the dot is a normal HoloLake Era wikilink target. For another sheet note, the part after the dot is an A1-style cell address.
Relative and absolute references work like spreadsheet references when copied:
- `[[revenue]].B5` can shift when pasted to another cell
- `[[revenue]].$B$5` stays fixed
- `[[revenue]].B$5` fixes the row
- `[[revenue]].$B5` fixes the column
This is not the same as an IronCalc workbook tab reference. It is HoloLake Era-specific syntax for referencing another sheet note in the vault.
Current cross-sheet formulas resolve single cells. Ranges across sheet notes are not a stable file-format feature yet, so prefer composing them from explicit cell references or keeping range formulas inside the same sheet note.
Sheet formulas can also read scalar frontmatter properties from a note:
```txt
=[[device]].power.watts
=[[project-alpha]].status
```
This keeps sheet models connected to ordinary HoloLake Era metadata without requiring a saved view or query. Unresolved, ambiguous, or non-scalar property references show spreadsheet errors.
## Storage
A minimal sheet note looks like this:
```md
---
type: Project
_display: sheet
status: Draft
belongs_to:
- "[[business-plan]]"
_sheet:
frozen_rows: 1
columns:
A:
width: 180
cells:
E6:
num_fmt: "0.00%"
---
Metric,January,February,March,Q1 Total
Subscriptions,1200,1350,1500,=SUM(B2:D2)
Services,800,900,750,=SUM(B3:D3)
Expenses,650,700,760,=SUM(B4:D4)
Net,=B2+B3-B4,=C2+C3-C4,=D2+D3-D4,=SUM(B5:D5)
Growth,,=(C5-B5)/B5,=(D5-C5)/C5,=(E5-B5)/B5
```
Normal frontmatter stays normal HoloLake Era metadata. `_sheet` is system metadata for the spreadsheet editor and is hidden from normal property editing.
For the full storage contract, see [Spreadsheet File Format](/reference/spreadsheet-format).
## Formulas
HoloLake Era delegates formula calculation to IronCalc. IronCalc aims for Excel-compatible formulas, while its project documentation still describes it as work in progress. For HoloLake Era-specific formula behavior and the autocomplete function catalog, see [Spreadsheet Formulas](/reference/spreadsheet-functions).

View file

@ -0,0 +1,51 @@
# Types
Types describe what kind of thing a note represents: Project, Person, Topic, Procedure, Event, or any category you create.
## Type Field
The `type:` field assigns a note to a type.
```yaml
type: Project
```
HoloLake Era does not infer type from folder location. Moving a file into another folder does not change its type.
## Prefer Types Over Folders
Types are the preferred way to group notes in HoloLake Era. Folders are supported for existing vaults and fallback organization, but HoloLake Era is built around types and relationships because they carry stronger meaning than file paths.
Use types for semantic groups such as Projects, People, Topics, Procedures, Events, and Essays. Use relationships to connect notes across those groups. This gives HoloLake Era better structure for navigation, filtering, properties, templates, and future automation than folder location alone.
## Type Documents
Type documents are Markdown notes with `type: Type` in frontmatter. They describe how a type should appear and what new notes of that type should start with.
```yaml
---
type: Type
_icon: folder
_color: blue
_sidebar_label: Projects
_order: 10
---
# Project
```
Type templates can live in the Type document's `template` frontmatter field. When a hand-edited Type body contains template-like structure after its own `# TypeName` heading, HoloLake Era also uses that body content as the new-note template. Plain descriptive body text stays documentation-only.
## What Types Control
- Sidebar grouping.
- Type icon and color.
- Sidebar order and label.
- Pinned properties.
- New-note templates.
## New Note Defaults
Type documents can define empty properties and relationships. When you create a new note of that type, HoloLake Era shows placeholders for those fields so you can fill them in from the Properties panel.
If a type document gives a property a value, that value becomes the default for new notes of that type. For example, a Project type can define `status: Active` so every new project starts active until you change it.

View file

@ -0,0 +1,45 @@
# Vaults
A vault is the folder HoloLake Era reads and writes. The filesystem is the source of truth; the app state and cache are derived from files.
## Core Rules
- Notes are Markdown files.
- YAML frontmatter provides structure.
- Attachments are normal files inside the vault.
- Type definitions and saved views are also files.
- Git can track history and support remote sync.
## Why Local Files Matter
Local files keep your notes inspectable. You can open them in another editor, search with command-line tools, back them up with your own system, and version them with Git.
HoloLake Era should never become the only way to read your data.
## Git Is A Capability
A plain folder of Markdown files can open as a vault. Git-backed vaults unlock history, changes, commits, pull, push, conflict handling, and remote setup.
If a folder is not a Git repository, HoloLake Era can initialize Git when you explicitly ask it to. It avoids initializing broad personal folders such as Desktop, Documents, or Downloads unless they are clearly dedicated vault folders.
## Multiple Vaults At The Same Time
HoloLake Era can load multiple registered vaults into one unified graph. Enable this from `Settings` -> `Vaults` -> `Use multiple vaults at the same time`.
After the option is enabled, open the bottom-left vault menu to include or exclude vaults from the graph. Included vaults appear together in note lists, search, quick open, backlinks, and wikilink navigation. Each note keeps a compact vault badge when HoloLake Era needs to disambiguate where it lives.
The selected vault still matters. Git status, commits, sync, folder navigation, saved views, and vault repair actions stay scoped to the current repository. Use `Manage vaults` from the vault menu or the Vaults settings section to rename vaults, choose colors, and set the default destination for new notes.
Cross-vault wikilinks use the target vault's stable alias when needed, for example `[[team/projects/alpha]]`. Links inside the same vault stay normal vault-relative links.
## App State Versus Vault State
Vault-level information should travel with the vault. Machine-specific preferences stay with the app installation.
| Vault state | App state |
| --- | --- |
| Type icons and colors | Editor zoom |
| Saved views | Window size |
| Pinned properties | Recent vault list |
| Relationship conventions | Local cache |
| Vault AI guidance files | AI target selection |

View file

@ -0,0 +1,25 @@
# Build Custom Views
Custom views are saved filters for recurring questions.
## Good View Candidates
- Active projects.
- People without a recent follow-up.
- Drafts ready for review.
- Notes changed this week.
- Events in a date range.
## View Definition
Saved views live as files in the vault. They describe filters, sorting, and visible columns using structured data.
## Filters
Custom views can use nested conditions, similar to Notion or Airtable filter groups. Combine `all` and `any` logic when a view needs to answer a more precise question than a single field filter can express.
Date filters support dynamic natural-language values such as `today`, `yesterday`, or `one week ago`. Use these for views that should keep moving over time, such as recent work, stale follow-ups, or upcoming events.
## Design The Question First
Before creating a view, write the question it answers. A good view is not "all fields with all filters"; it is a focused lens.

View file

@ -0,0 +1,18 @@
# Capture A Note
Use capture when you need to get an idea into the vault before you know where it belongs.
## Steps
1. Press `Cmd+N` on macOS or `Ctrl+N` on Windows and Linux.
2. Write a clear H1.
3. Add the rough content.
4. Leave structure for later if you are still thinking.
## Capture Well
Prefer a useful title over a perfect taxonomy. You can add type, status, and relationships during inbox review.
## When To Add Structure Immediately
Add structure while capturing when the note's type or relationships are already obvious. Otherwise, capture the idea first and organize it later.

View file

@ -0,0 +1,23 @@
# Manage Git Manually Or With AutoGit
HoloLake Era can act as a lightweight Git client for a Git-enabled vault. You can manage commits and pushes yourself, or enable AutoGit to create conservative checkpoints after editing pauses or when the app is no longer active.
## Manual Git
1. Open the Git or changes surface.
2. Review changed files.
3. Write a short commit message.
4. Commit locally.
5. Push when a remote is configured.
If the remote has changed, pull first and resolve any conflicts. If the vault has no remote, manual commits still give you local history, diffs, and rollback.
## AutoGit
AutoGit is available in Settings for Git-enabled vaults. When enabled, HoloLake Era automatically commits and pushes saved local changes after an idle pause or after the app becomes inactive.
Use AutoGit when you want the safety of regular checkpoints without interrupting capture or editing. You can still inspect each note's current diff, review note history, and browse the whole-vault history before making larger manual commits.
## Use Small Commits
Small commits make it easier to understand what changed, roll back safely, and review AI-generated edits.

View file

@ -0,0 +1,25 @@
# Configure AI Models
Use model providers when you want chat over note context without giving an agent vault-write tools.
## Local Models
Local model targets are for tools such as Ollama and LM Studio. They usually need a base URL and model ID, and they usually do not need an API key.
## API Models
API model targets are for hosted providers such as OpenAI, Anthropic, Gemini, OpenRouter, or another OpenAI-compatible endpoint.
HoloLake Era does not store provider API keys in vault settings. Choose one of the supported key paths:
- Save the key locally on this device.
- Read the key from an environment variable.
- Use no key for local providers that do not require one.
## Test The Connection
After adding a provider, use the test action in Settings. A successful test means HoloLake Era reached the endpoint and the model replied.
## Select The Target
Once configured, choose the model from the AI target selector or set it as the default AI target in Settings.

View file

@ -0,0 +1,23 @@
# Connect A Git Remote
Connect a remote when you want backup or sync beyond the current machine.
## Before You Start
Make sure the remote repository exists and your system Git can authenticate to it. HoloLake Era uses system Git rather than storing provider-specific credentials.
## Steps
1. Open the bottom status bar remote chip, or run `Add Remote` from the command palette.
2. Paste the remote URL.
3. Confirm the remote name.
4. Fetch or push according to the app prompt.
## Recommended Auth
- SSH keys.
- GitHub CLI authentication.
- Existing Git credential helpers.
- macOS Keychain credentials for HTTPS remotes on macOS.
If authentication fails, see [Git Authentication](/troubleshooting/git-auth).

View file

@ -0,0 +1,35 @@
# Create Types
Create a type when several notes share the same role in your system.
## Steps
1. Run `New Type` from the command palette, or click `+` in the Types header in the sidebar.
2. Give the type a clear name.
3. Add optional icon, color, sidebar order, sidebar label, pinned properties, suggested fields, default values, or a new-note template.
You can also right-click a type in the sidebar to change its icon and color.
```yaml
---
type: Type
_icon: briefcase
_color: blue
_sidebar_label: Projects
_order: 10
---
# Project
```
## Use Types Sparingly
A type should represent a recurring category, not a one-off label. If you only need a temporary grouping, use a saved view or property instead.
## Templates
Type documents can include a Markdown template for new notes of that type. Keep templates small and useful: a heading, a few expected fields, and the first checklist are usually enough.
You can store the template in the Type document's `template` frontmatter field. When hand-editing the Type document body, content after the Type note's own `# TypeName` heading is also used as the new-note template if it looks like template structure such as field labels, secondary headings, or checklist starters. Plain descriptive body text is ignored.
Type documents can also define fields for new notes. Empty properties and relationships become placeholders in new notes of that type. Properties with values become defaults for new notes of that type.

View file

@ -0,0 +1,26 @@
# Manage Display Preferences
Display preferences live in local app settings unless a setting is intentionally stored in the note or vault.
## Theme
Choose Light, Dark, or System in Settings. System follows the operating system appearance at runtime.
You can also switch theme mode from the command palette.
## Note Width
Set the default rich-editor width in Settings:
- **Normal** for focused writing.
- **Wide** for tables, diagrams, dense notes, and generated documents.
An individual note can override the default width from the editor toolbar. That override is stored as `_width` in the note frontmatter.
## Sidebar Labels
HoloLake Era can pluralize type names in the sidebar. Turn this off in Settings if your type names should be shown exactly as written, or use `_sidebar_label` on a type document for an explicit label.
## Vault Content
Settings also control whether Gitignored files and non-Markdown file categories are visible in the app. Use these controls to keep generated or local-only files out of regular note workflows.

View file

@ -0,0 +1,31 @@
# Organize The Inbox
Inbox review turns quick captures into usable knowledge.
## Remove A Note From Inbox
When a note is organized enough, mark it as organized. Use `Cmd+E` on macOS or `Ctrl+E` on Windows and Linux, or click the organize action in the breadcrumb bar.
That action is what removes the note from Inbox. If auto-advance is enabled in Settings > Workflow, HoloLake Era opens the next Inbox item immediately after you mark the current note organized.
## Review Checklist
- Rename unclear notes.
- Add or correct the first H1.
- Set `type`.
- Add `status` for actionable notes.
- Add `belongs_to`, `related_to`, or other relationship fields when useful.
- Archive or delete notes that no longer matter.
## Make Notes Navigable
A note is organized when you can answer:
- What kind of thing is this?
- What is it connected to?
- What is this useful for?
- What will I do with it?
## Avoid Over-Structuring
Do not add fields just because they exist. Add the structure that will help future navigation, review, or automation.

View file

@ -0,0 +1,38 @@
# Use The AI
HoloLake Era gives you two ways to ask for AI help: open the AI panel for an ongoing conversation, or prompt directly from the editor with `Cmd+K` followed by a space.
## Choose How To Prompt
- **AI panel** is best for longer conversations, agent work, and requests that need visible back-and-forth.
- **Inline prompt** is best when you are already writing. Press `Cmd+K`, type a space, then write the prompt you want the AI to handle from the current note context.
## Choose A Target
Open Settings and choose the default AI target:
- **Coding agent** for tool-backed vault editing through Claude Code, Codex, OpenCode, Pi, or Antigravity CLI.
- **Local model** for Ollama or LM Studio chat over note context.
- **API model** for OpenAI, Anthropic, Gemini, OpenRouter, or an OpenAI-compatible endpoint.
If a coding agent is missing, install it and reopen HoloLake Era or switch to another target.
## Permission Mode
Coding agents support per-vault permission modes:
- **Vault Safe** keeps agents limited to file, search, and edit tools.
- **Power User** can allow shell commands for agents that support them.
Direct model targets always stay in chat mode. They can use note context, but they cannot edit vault files through tools.
## Good Requests
- "Find notes related to this project."
- "Summarize what changed in this note."
- "Draft a weekly review from these linked notes."
- "Update this checklist based on the current project status."
## Review Changes
AI edits are file edits. Review them with HoloLake Era's diff and Git history before committing.

View file

@ -0,0 +1,26 @@
# Use The Command Palette
The command palette is the fastest way to move around HoloLake Era.
Open it with:
- `Cmd+K` on macOS.
- `Ctrl+K` on Linux and Windows.
## Common Commands
- New Note.
- Search.
- Open Settings.
- Reload Vault.
- Add Remote.
- Open Getting Started Vault.
- Toggle Raw Mode.
- Toggle Table of Contents.
- Toggle AI Panel.
- Use Light, Dark, or System theme.
- Open in New Window.
## Keyboard-First Workflow
Use the palette when you know what you want to do but do not want to hunt through panels. It is also the best place to discover commands as the app grows.

View file

@ -0,0 +1,25 @@
# Use Media Previews
Media previews let you inspect vault files without leaving HoloLake Era.
## Open A File
Select an image, PDF, media file, or unsupported file from a folder or file list. HoloLake Era opens supported files in the app and offers an external-open action for files that should use the system default app.
## All Notes Visibility
Open Settings to choose whether non-Markdown files appear in All Notes:
- PDFs.
- Images.
- Unsupported files.
Folder browsing still shows files in their folders even when a category is hidden from All Notes.
## Attachments
When you paste or drop an image into a note, HoloLake Era copies it into the vault and references the copied file from Markdown.
## Troubleshooting
If a preview does not render, open the file in the default app to confirm the file is valid, then check whether the file is inside the active vault and not blocked by operating-system permissions.

View file

@ -0,0 +1,146 @@
# Use Spreadsheets
HoloLake Era spreadsheets are sheet notes: Markdown files with frontmatter and a CSV-like body that open in a spreadsheet editor when their `Display as` value is `Sheet`.
Use a sheet note when a model needs rows, columns, calculations, or repeated numeric editing. Use a normal note when the main artifact is prose.
## Create A Sheet
Use the command palette action `New Sheet`, or create/open a note and set its `Display as` to `Sheet` from the Properties panel. `Type` remains separate and can still be `Note`, `Project`, `Responsibility`, or any other HoloLake Era type.
When a note is a sheet:
- the YAML frontmatter remains available for type, status, relationships, wikilinks, and custom properties
- `_display: sheet` tells HoloLake Era to display the note with the spreadsheet editor
- the body is the sheet itself
- there is no rich-text body around the table
- the editor switches from the text editor to the spreadsheet editor
## Enter Values
Click a cell and type a value. Non-formula values can be text, numbers, dates, or wikilinks.
Press `Enter` on a selected cell to edit the cell. Press `Escape` while editing to leave cell editing and keep focus in the sheet.
Use `Delete` or `Backspace` to clear the selected cell or range.
## Enter Formulas
Formulas start with `=`.
```txt
=B2+B3-B4
=SUM(B2:D2)
=ROUND(E6, 2)
=IF(E6>0, "Up", "Down")
```
HoloLake Era shows inline formula autocomplete while you type. The autocomplete list is built from the implemented function catalog in the bundled IronCalc engine; formula evaluation is still handled by IronCalc.
See [Spreadsheet Formulas](/reference/spreadsheet-functions) for syntax, supported examples, and links to the full IronCalc formula reference.
## Select And Edit Ranges
The sheet editor follows spreadsheet conventions:
- arrow keys move the active cell
- `Shift` plus arrow keys extends the selection
- drag to select a range
- copy and paste preserves formulas where possible
- cut and paste moves formulas and shifts relative references
- right-click a selected cell or range to apply formatting
Right-click actions apply to the current selection. Keep a multi-cell selection active before opening the context menu when you want to format several cells together.
## Format Cells
Use the context menu for common formatting:
- number formats such as plain numbers, currency, and percentages
- decimal precision
- bold and italic text
- alignment and clearing formatting when available
Formatting is stored as plain YAML under `_sheet`, not in an opaque workbook blob. For example, percentage formatting for `E6` is stored as:
```yaml
_sheet:
cells:
E6:
num_fmt: "0.00%"
```
See [Spreadsheet File Format](/reference/spreadsheet-format) for the full storage model.
## Add Wikilinks
Type `[[` in a cell to open note autocomplete.
```csv
Project,Owner,Status
[[website-redesign]],[[person/alice]],Active
[[sponsorship-pipeline]],[[person/matteo]],Review
```
When the cell is not being edited, HoloLake Era renders the wikilink like other note links. When you edit the cell, the raw `[[wikilink]]` syntax is shown again.
Command-click a wikilink in a sheet cell to open the linked note.
## Reference Another Note
Formulas can read a cell from another sheet note with HoloLake Era's wikilink cell syntax:
```txt
=[[newsletter-revenue]].B5
=SUM(B2:D2)+[[sponsorship-pipeline]].E12
=ROUND([[business-plan]].$E$12, 2)
```
The part inside `[[...]]` resolves like a normal HoloLake Era wikilink. The part after the dot is an A1-style cell reference.
Use absolute markers when copying formulas:
| Reference | Copy behavior |
| --- | --- |
| `[[revenue]].B5` | row and column can shift |
| `[[revenue]].$B$5` | row and column stay fixed |
| `[[revenue]].B$5` | row fixed, column can shift |
| `[[revenue]].$B5` | column fixed, row can shift |
Cross-sheet references currently resolve single cells. Keep range formulas inside one sheet note.
Formulas can read scalar frontmatter properties from a note with dot notation:
```txt
=[[device]].power.watts
=[[project-alpha]].status
=[[book-notes/the-design-of-everyday-things.md]].rating
```
Numbers, booleans, and text properties can be used in formulas. Missing or ambiguous note targets, missing properties, and non-scalar values such as lists or nested objects show as spreadsheet errors.
## Work With The Raw File
A sheet file remains readable text:
```md
---
type: Project
_display: sheet
status: Draft
belongs_to:
- "[[business-plan]]"
_sheet:
frozen_rows: 1
columns:
A:
width: 180
---
Metric,January,February,March,Q1 Total
Subscriptions,1200,1350,1500,=SUM(B2:D2)
Services,800,900,750,=SUM(B3:D3)
Expenses,650,700,760,=SUM(B4:D4)
Net,=B2+B3-B4,=C2+C3-C4,=D2+D3-D4,=SUM(B5:D5)
```
When editing this file with scripts or AI agents, parse the body as CSV and preserve formulas as formulas. Do not replace formulas with displayed values.

View file

@ -0,0 +1,23 @@
# Use The Table Of Contents
The table of contents panel helps you navigate long notes by heading.
## Open It
Use the editor toolbar, the command palette, or the shortcut:
- `Cmd+Shift+T` on macOS.
- `Ctrl+Shift+T` on Windows and Linux.
## How It Works
HoloLake Era builds the outline from the current note's headings. The panel updates as the note changes and can jump to sections in the editor.
## Good Uses
- Long procedures.
- Meeting notes with many sections.
- Research notes.
- Generated documents that need review.
If a note has no useful headings, add clear H2 and H3 sections rather than relying on a long uninterrupted document.

View file

@ -0,0 +1,24 @@
# Use Wikilinks
Wikilinks connect notes by name.
```md
This project belongs to [[content-systems]] and is related to [[git-workflows]].
```
## Link From The Body
Use body links when the connection is part of the sentence you are writing.
## Link From Frontmatter
Use frontmatter links when the relationship should become structured metadata.
```yaml
related_to:
- "[[git-workflows]]"
```
## Keep Links Stable
Prefer clear note titles and filenames. HoloLake Era's wikilink autocomplete helps you pick the right target while you type.

View file

@ -0,0 +1,10 @@
---
layout: page
sidebar: false
aside: false
landing: true
title: HoloLake Era
description: A second brain for the AI era. Free forever.
---
<LandingHome />

View file

@ -0,0 +1 @@
tolaria.md

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

View file

@ -0,0 +1,12 @@
# Sponsor Logo Sources
These wordmarks are used in the README sponsor table and the landing-page sponsor section.
| Sponsor | Source |
|---|---|
| Codacy | `https://www.codacy.com/` header asset: `Codacylogo.svg` |
| CodeScene | `https://codescene.com/` header SVG |
| CircleCI | `https://brand.circleci.com/613faff00/p/14ba30-circleci-brand` logo SVG |
| Unblocked | `https://getunblocked.com/` header/footer logo SVGs |
`*-dark.svg` files are dark wordmark variants for light surfaces. `*-light.svg` files are white or light wordmark variants for dark surfaces.

View file

@ -0,0 +1,3 @@
<svg width="400" height="103" viewBox="0 0 400 103" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.661 56.4638C30.661 51.019 35.1617 46.5515 40.647 46.5515C46.1322 46.5515 50.6329 51.019 50.6329 56.4638C50.6329 61.9085 46.1322 66.376 40.647 66.376C35.0211 66.376 30.661 62.0481 30.661 56.4638ZM40.647 15C21.097 15 4.64135 28.2628 0 46.2723C0 46.4119 0 46.5515 0 46.6912C0 47.808 0.843882 48.6457 1.96906 48.6457H18.8467C19.6906 48.6457 20.3938 48.2268 20.6751 47.5288C24.1913 39.9899 31.7862 34.8244 40.647 34.8244C52.7426 34.8244 62.5879 44.597 62.5879 56.6034C62.5879 68.6097 52.7426 78.3823 40.647 78.3823C31.7862 78.3823 24.1913 73.2168 20.6751 65.6779C20.3938 64.9799 19.6906 64.5611 18.8467 64.5611H1.96906C0.843882 64.4214 0 65.2591 0 66.376C0 66.5156 0 66.6552 0 66.7948C4.64135 84.8043 21.097 98.0671 40.647 98.0671C63.7131 98.0671 82.4191 79.4992 82.4191 56.6034C82.4191 33.5679 63.7131 15 40.647 15ZM149.93 66.2364H144.304C143.882 66.2364 143.601 66.376 143.319 66.6552C140.084 71.5415 134.459 74.7525 128.129 74.7525C117.862 74.7525 109.705 66.6552 109.705 56.4638C109.705 46.2723 118.003 38.175 128.129 38.175C134.459 38.175 140.084 41.386 143.319 46.2723C143.601 46.5515 143.882 46.6912 144.304 46.6912H149.93C150.633 46.6912 151.195 46.1327 151.195 45.4347C151.195 45.2951 151.195 45.0158 151.055 44.8762C146.835 36.4997 138.115 30.7758 128.129 30.7758C113.924 30.7758 102.391 42.2237 102.391 56.3241C102.391 70.7038 113.924 82.0121 128.129 82.0121C138.115 82.0121 146.835 76.2882 151.055 67.9117C151.195 67.772 151.195 67.6324 151.195 67.3532C151.195 66.7948 150.633 66.2364 149.93 66.2364ZM167.089 22.3993C167.089 25.0518 164.838 27.2856 162.166 27.2856C159.494 27.2856 157.243 25.0518 157.243 22.3993C157.243 19.7467 159.494 17.513 162.166 17.513C164.979 17.6526 167.089 19.7467 167.089 22.3993ZM165.963 79.6388V32.1719H158.65V79.6388C158.65 80.3368 159.212 80.8953 159.916 80.8953H164.838C165.401 80.8953 165.963 80.3368 165.963 79.6388ZM197.75 31.055C190.295 31.3342 184.388 34.964 180.591 40.2692V33.4283C180.591 32.7303 180.028 32.1719 179.325 32.1719H174.402C173.699 32.1719 173.136 32.7303 173.136 33.4283V79.6388C173.136 80.3368 173.699 80.8953 174.402 80.8953H179.325C180.028 80.8953 180.591 80.3368 180.591 79.6388V56.4638C180.591 46.8308 188.186 38.8731 197.75 38.3146C198.453 38.3146 199.015 37.7562 199.015 37.0582V32.1719C199.015 31.6134 198.453 31.055 197.75 31.055ZM246.695 66.2364H241.069C240.647 66.2364 240.366 66.376 240.084 66.6552C236.85 71.5415 231.224 74.7525 224.895 74.7525C214.768 74.7525 206.47 66.5156 206.47 56.4638C206.47 46.4119 214.768 38.175 224.895 38.175C231.224 38.175 236.85 41.386 240.084 46.2723C240.366 46.5515 240.647 46.6912 241.069 46.6912H246.695C247.398 46.6912 247.961 46.1327 247.961 45.4347C247.961 45.2951 247.961 45.0158 247.82 44.8762C243.601 36.4997 234.88 30.7758 224.895 30.7758C210.689 30.7758 199.156 42.2237 199.156 56.3241C199.156 70.4246 210.689 81.8725 224.895 81.8725C234.88 81.8725 243.601 76.1486 247.82 67.772C247.961 67.6324 247.961 67.4928 247.961 67.2136C247.82 66.7948 247.398 66.2364 246.695 66.2364ZM261.322 16.3961H256.399C255.696 16.3961 255.134 16.9545 255.134 17.6526V79.7784C255.134 80.4764 255.696 81.0349 256.399 81.0349H261.322C262.025 81.0349 262.588 80.4764 262.588 79.7784V17.6526C262.588 16.9545 262.025 16.3961 261.322 16.3961ZM295.64 30.9154C281.435 30.9154 269.902 42.3633 269.902 56.4638C269.902 70.5642 281.435 82.0121 295.64 82.0121C305.626 82.0121 314.346 76.2882 318.565 67.9117C318.706 67.772 318.706 67.6324 318.706 67.3532C318.706 66.6552 318.143 66.0967 317.44 66.0967H311.814C311.392 66.0967 311.111 66.2364 310.83 66.6552C307.454 71.5415 301.969 74.6129 295.64 74.6129C286.357 74.6129 278.622 67.772 277.356 58.8371H320.113C320.816 58.8371 321.238 58.2787 321.378 57.7202C321.378 57.3014 321.378 56.8826 321.378 56.4638C321.378 42.3633 309.845 30.9154 295.64 30.9154ZM277.918 51.7171C280.028 44.0386 287.201 38.3146 295.64 38.3146C304.079 38.3146 311.252 44.0386 313.361 51.7171H277.918ZM392.686 15.1396C388.608 15.1396 385.373 18.3506 385.373 22.3993C385.373 26.4479 388.608 29.6589 392.686 29.6589C396.765 29.6589 400 26.4479 400 22.3993C400 18.4902 396.765 15.1396 392.686 15.1396ZM398.734 32.1719V79.6388C398.734 80.3368 398.172 80.8953 397.468 80.8953H387.623C386.92 80.8953 386.357 80.3368 386.357 79.6388V32.1719H398.734ZM354.571 82.0121C366.526 82.0121 376.653 73.7752 379.466 62.7461C379.466 62.6065 379.466 62.6065 379.466 62.4669C379.466 61.7689 378.903 61.2104 378.2 61.2104H367.792C367.229 61.2104 366.807 61.4897 366.667 61.9085C364.557 66.5156 359.916 69.7266 354.43 69.7266C346.976 69.7266 340.928 63.7234 340.928 56.3241C340.928 48.9249 346.976 42.9217 354.43 42.9217C359.916 42.9217 364.557 46.1327 366.667 50.7398C366.807 51.1586 367.229 51.4378 367.792 51.4378H378.2C378.903 51.4378 379.466 50.8794 379.466 50.1814C379.466 50.0418 379.466 50.0418 379.466 49.9021C376.653 38.8731 366.526 30.6362 354.571 30.6362C340.366 30.6362 328.833 42.0841 328.833 56.1845C328.833 70.7038 340.366 82.0121 354.571 82.0121Z" fill="#171717"/>
</svg>

After

Width:  |  Height:  |  Size: 5 KiB

View file

@ -0,0 +1,3 @@
<svg width="400" height="103" viewBox="0 0 400 103" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.661 56.4638C30.661 51.019 35.1617 46.5515 40.647 46.5515C46.1322 46.5515 50.6329 51.019 50.6329 56.4638C50.6329 61.9085 46.1322 66.376 40.647 66.376C35.0211 66.376 30.661 62.0481 30.661 56.4638ZM40.647 15C21.097 15 4.64135 28.2628 0 46.2723C0 46.4119 0 46.5515 0 46.6912C0 47.808 0.843882 48.6457 1.96906 48.6457H18.8467C19.6906 48.6457 20.3938 48.2268 20.6751 47.5288C24.1913 39.9899 31.7862 34.8244 40.647 34.8244C52.7426 34.8244 62.5879 44.597 62.5879 56.6034C62.5879 68.6097 52.7426 78.3823 40.647 78.3823C31.7862 78.3823 24.1913 73.2168 20.6751 65.6779C20.3938 64.9799 19.6906 64.5611 18.8467 64.5611H1.96906C0.843882 64.4214 0 65.2591 0 66.376C0 66.5156 0 66.6552 0 66.7948C4.64135 84.8043 21.097 98.0671 40.647 98.0671C63.7131 98.0671 82.4191 79.4992 82.4191 56.6034C82.4191 33.5679 63.7131 15 40.647 15ZM149.93 66.2364H144.304C143.882 66.2364 143.601 66.376 143.319 66.6552C140.084 71.5415 134.459 74.7525 128.129 74.7525C117.862 74.7525 109.705 66.6552 109.705 56.4638C109.705 46.2723 118.003 38.175 128.129 38.175C134.459 38.175 140.084 41.386 143.319 46.2723C143.601 46.5515 143.882 46.6912 144.304 46.6912H149.93C150.633 46.6912 151.195 46.1327 151.195 45.4347C151.195 45.2951 151.195 45.0158 151.055 44.8762C146.835 36.4997 138.115 30.7758 128.129 30.7758C113.924 30.7758 102.391 42.2237 102.391 56.3241C102.391 70.7038 113.924 82.0121 128.129 82.0121C138.115 82.0121 146.835 76.2882 151.055 67.9117C151.195 67.772 151.195 67.6324 151.195 67.3532C151.195 66.7948 150.633 66.2364 149.93 66.2364ZM167.089 22.3993C167.089 25.0518 164.838 27.2856 162.166 27.2856C159.494 27.2856 157.243 25.0518 157.243 22.3993C157.243 19.7467 159.494 17.513 162.166 17.513C164.979 17.6526 167.089 19.7467 167.089 22.3993ZM165.963 79.6388V32.1719H158.65V79.6388C158.65 80.3368 159.212 80.8953 159.916 80.8953H164.838C165.401 80.8953 165.963 80.3368 165.963 79.6388ZM197.75 31.055C190.295 31.3342 184.388 34.964 180.591 40.2692V33.4283C180.591 32.7303 180.028 32.1719 179.325 32.1719H174.402C173.699 32.1719 173.136 32.7303 173.136 33.4283V79.6388C173.136 80.3368 173.699 80.8953 174.402 80.8953H179.325C180.028 80.8953 180.591 80.3368 180.591 79.6388V56.4638C180.591 46.8308 188.186 38.8731 197.75 38.3146C198.453 38.3146 199.015 37.7562 199.015 37.0582V32.1719C199.015 31.6134 198.453 31.055 197.75 31.055ZM246.695 66.2364H241.069C240.647 66.2364 240.366 66.376 240.084 66.6552C236.85 71.5415 231.224 74.7525 224.895 74.7525C214.768 74.7525 206.47 66.5156 206.47 56.4638C206.47 46.4119 214.768 38.175 224.895 38.175C231.224 38.175 236.85 41.386 240.084 46.2723C240.366 46.5515 240.647 46.6912 241.069 46.6912H246.695C247.398 46.6912 247.961 46.1327 247.961 45.4347C247.961 45.2951 247.961 45.0158 247.82 44.8762C243.601 36.4997 234.88 30.7758 224.895 30.7758C210.689 30.7758 199.156 42.2237 199.156 56.3241C199.156 70.4246 210.689 81.8725 224.895 81.8725C234.88 81.8725 243.601 76.1486 247.82 67.772C247.961 67.6324 247.961 67.4928 247.961 67.2136C247.82 66.7948 247.398 66.2364 246.695 66.2364ZM261.322 16.3961H256.399C255.696 16.3961 255.134 16.9545 255.134 17.6526V79.7784C255.134 80.4764 255.696 81.0349 256.399 81.0349H261.322C262.025 81.0349 262.588 80.4764 262.588 79.7784V17.6526C262.588 16.9545 262.025 16.3961 261.322 16.3961ZM295.64 30.9154C281.435 30.9154 269.902 42.3633 269.902 56.4638C269.902 70.5642 281.435 82.0121 295.64 82.0121C305.626 82.0121 314.346 76.2882 318.565 67.9117C318.706 67.772 318.706 67.6324 318.706 67.3532C318.706 66.6552 318.143 66.0967 317.44 66.0967H311.814C311.392 66.0967 311.111 66.2364 310.83 66.6552C307.454 71.5415 301.969 74.6129 295.64 74.6129C286.357 74.6129 278.622 67.772 277.356 58.8371H320.113C320.816 58.8371 321.238 58.2787 321.378 57.7202C321.378 57.3014 321.378 56.8826 321.378 56.4638C321.378 42.3633 309.845 30.9154 295.64 30.9154ZM277.918 51.7171C280.028 44.0386 287.201 38.3146 295.64 38.3146C304.079 38.3146 311.252 44.0386 313.361 51.7171H277.918ZM392.686 15.1396C388.608 15.1396 385.373 18.3506 385.373 22.3993C385.373 26.4479 388.608 29.6589 392.686 29.6589C396.765 29.6589 400 26.4479 400 22.3993C400 18.4902 396.765 15.1396 392.686 15.1396ZM398.734 32.1719V79.6388C398.734 80.3368 398.172 80.8953 397.468 80.8953H387.623C386.92 80.8953 386.357 80.3368 386.357 79.6388V32.1719H398.734ZM354.571 82.0121C366.526 82.0121 376.653 73.7752 379.466 62.7461C379.466 62.6065 379.466 62.6065 379.466 62.4669C379.466 61.7689 378.903 61.2104 378.2 61.2104H367.792C367.229 61.2104 366.807 61.4897 366.667 61.9085C364.557 66.5156 359.916 69.7266 354.43 69.7266C346.976 69.7266 340.928 63.7234 340.928 56.3241C340.928 48.9249 346.976 42.9217 354.43 42.9217C359.916 42.9217 364.557 46.1327 366.667 50.7398C366.807 51.1586 367.229 51.4378 367.792 51.4378H378.2C378.903 51.4378 379.466 50.8794 379.466 50.1814C379.466 50.0418 379.466 50.0418 379.466 49.9021C376.653 38.8731 366.526 30.6362 354.571 30.6362C340.366 30.6362 328.833 42.0841 328.833 56.1845C328.833 70.7038 340.366 82.0121 354.571 82.0121Z" fill="#ffffff"/>
</svg>

After

Width:  |  Height:  |  Size: 5 KiB

View file

@ -0,0 +1,16 @@
<svg width="139" height="40" viewBox="0 0 139 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.36764 16.0917C7.32203 12.5678 9.63126 9.56442 12.7881 7.74239L9.83149 2.63672C5.3198 5.23961 2.02281 9.53105 0.667969 14.5633L6.36764 16.0917Z" fill="#0f172a"/>
<path d="M16.1182 6.3604C17.2795 6.05339 18.4742 5.89322 19.6755 5.89989V0C17.9603 0 16.2517 0.220245 14.5898 0.660734L16.1182 6.3604Z" fill="#0f172a"/>
<path d="M23.2598 6.36666C26.777 7.32105 29.7803 9.63029 31.6024 12.7871L36.7147 9.83718C34.1052 5.3255 29.8137 2.02851 24.7881 0.666992L23.2598 6.36666Z" fill="#0f172a"/>
<path d="M0 19.6553C0 21.3705 0.220245 23.0791 0.667408 24.7409L6.36708 23.2126C6.05339 22.0513 5.89989 20.8566 5.89989 19.6553H0Z" fill="#0f172a"/>
<path d="M2.63672 29.4929C3.49768 30.9746 4.54551 32.3427 5.75352 33.5508L9.94484 29.3861C9.09723 28.5318 8.36308 27.5775 7.75574 26.543L2.63672 29.4929Z" fill="#0f172a"/>
<path d="M9.83984 36.6866C12.8232 38.4152 16.2136 39.3228 19.6574 39.3162V33.4163C17.2481 33.4163 14.8788 32.7822 12.7898 31.5742L9.83984 36.6866Z" fill="#0f172a"/>
<path d="M31.5942 26.5566C29.7655 29.7068 26.7622 32.0094 23.2383 32.9504L24.7666 38.6501C29.7989 37.2952 34.0903 34.0049 36.6999 29.4999L31.5942 26.5566Z" fill="#0f172a"/>
<path d="M38.9161 24.7341C39.8238 21.3971 39.8372 17.8798 38.9629 14.5361L33.2432 16.0645C33.8572 18.4071 33.8438 20.8698 33.2031 23.2058L38.9161 24.7341Z" fill="#0f172a"/>
<path d="M62.2624 17.5331C61.5683 15.7711 60.0466 14.73 58.3714 14.73C55.8086 14.73 54.0733 16.9258 54.0733 19.4219C54.0733 22.0248 55.8553 24.2005 58.3981 24.2005C60.0266 24.2005 61.4148 23.2862 62.2624 21.4842H66.5605C65.5594 25.3484 62.2424 27.8045 58.4382 27.8045C56.2023 27.8045 54.0933 27.0236 52.4448 25.3952C50.7096 23.7 49.9688 21.6577 49.9688 19.2283C49.9688 14.9702 53.6395 11.126 58.2446 11.126C60.4604 11.126 62.2424 11.7333 63.8508 13.1015C65.3725 14.403 66.2869 15.8846 66.5672 17.5331H62.2624Z" fill="#0f172a"/>
<path d="M74.4704 27.8709C70.7997 27.8709 67.9766 25.1545 67.9766 21.4638C67.9766 17.7263 70.8664 15.0566 74.4704 15.0566C78.0945 15.0566 80.9643 17.773 80.9643 21.4237C80.9643 25.1946 78.1012 27.8709 74.4704 27.8709ZM77.3603 21.4638C77.3603 19.8553 76.1456 18.4204 74.4504 18.4204C72.862 18.4204 71.5872 19.8086 71.5872 21.4638C71.5872 23.1123 72.8486 24.5071 74.4771 24.5071C76.1657 24.5005 77.3603 23.0655 77.3603 21.4638Z" fill="#0f172a"/>
<path d="M92.1294 27.497V26.1955H92.0894C91.4153 27.3034 90.2006 27.8907 88.4854 27.8907C84.8346 27.8907 82.4453 25.0876 82.4453 21.4369C82.4453 17.8329 84.9014 15.0298 88.4186 15.0298C89.8068 15.0298 90.9347 15.4436 91.9559 16.4647V11.4258H95.5599V27.497H92.1294ZM92.1494 21.4169C92.1494 19.7417 90.868 18.4002 89.086 18.4002C87.3908 18.4002 86.0426 19.6616 86.0426 21.4169C86.0426 23.2389 87.3241 24.5203 89.0593 24.5203C90.828 24.5203 92.1494 23.1989 92.1494 21.4169Z" fill="#0f172a"/>
<path d="M107.227 27.4975V26.196H107.187C106.666 27.2639 105.231 27.9113 103.649 27.9113C100.085 27.9113 97.6094 25.1081 97.6094 21.4574C97.6094 17.8935 100.192 15.0303 103.649 15.0303C105.124 15.0303 106.493 15.6176 107.187 16.7255H107.227V15.4441H110.831V27.4975H107.227ZM107.227 21.4641C107.227 19.7689 105.859 18.4007 104.163 18.4007C102.515 18.4007 101.207 19.7689 101.207 21.5041C101.207 23.1793 102.528 24.5475 104.203 24.5475C105.905 24.5475 107.227 23.1994 107.227 21.4641Z" fill="#0f172a"/>
<path d="M121.976 20.0959C121.456 18.968 120.522 18.4007 119.28 18.4007C117.632 18.4007 116.497 19.7689 116.497 21.4641C116.497 23.226 117.692 24.5275 119.367 24.5275C120.582 24.5275 121.429 23.9669 121.976 22.919H125.647C124.933 25.9357 122.344 27.8912 119.26 27.8912C115.696 27.8912 112.873 25.0014 112.873 21.4374C112.873 17.8334 115.723 15.0303 119.193 15.0303C122.364 15.0303 124.946 17.0258 125.621 20.0892H121.976V20.0959Z" fill="#0f172a"/>
<path d="M128.477 31.5146L130.386 26.8894L125.914 15.4434H129.758L132.168 22.4378H132.208L134.51 15.4434H138.335L132.294 31.5146H128.477Z" fill="#0f172a"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -0,0 +1,16 @@
<svg width="139" height="40" viewBox="0 0 139 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.36764 16.0917C7.32203 12.5678 9.63126 9.56442 12.7881 7.74239L9.83149 2.63672C5.3198 5.23961 2.02281 9.53105 0.667969 14.5633L6.36764 16.0917Z" fill="white"/>
<path d="M16.1182 6.3604C17.2795 6.05339 18.4742 5.89322 19.6755 5.89989V0C17.9603 0 16.2517 0.220245 14.5898 0.660734L16.1182 6.3604Z" fill="white"/>
<path d="M23.2598 6.36666C26.777 7.32105 29.7803 9.63029 31.6024 12.7871L36.7147 9.83718C34.1052 5.3255 29.8137 2.02851 24.7881 0.666992L23.2598 6.36666Z" fill="white"/>
<path d="M0 19.6553C0 21.3705 0.220245 23.0791 0.667408 24.7409L6.36708 23.2126C6.05339 22.0513 5.89989 20.8566 5.89989 19.6553H0Z" fill="white"/>
<path d="M2.63672 29.4929C3.49768 30.9746 4.54551 32.3427 5.75352 33.5508L9.94484 29.3861C9.09723 28.5318 8.36308 27.5775 7.75574 26.543L2.63672 29.4929Z" fill="white"/>
<path d="M9.83984 36.6866C12.8232 38.4152 16.2136 39.3228 19.6574 39.3162V33.4163C17.2481 33.4163 14.8788 32.7822 12.7898 31.5742L9.83984 36.6866Z" fill="white"/>
<path d="M31.5942 26.5566C29.7655 29.7068 26.7622 32.0094 23.2383 32.9504L24.7666 38.6501C29.7989 37.2952 34.0903 34.0049 36.6999 29.4999L31.5942 26.5566Z" fill="white"/>
<path d="M38.9161 24.7341C39.8238 21.3971 39.8372 17.8798 38.9629 14.5361L33.2432 16.0645C33.8572 18.4071 33.8438 20.8698 33.2031 23.2058L38.9161 24.7341Z" fill="white"/>
<path d="M62.2624 17.5331C61.5683 15.7711 60.0466 14.73 58.3714 14.73C55.8086 14.73 54.0733 16.9258 54.0733 19.4219C54.0733 22.0248 55.8553 24.2005 58.3981 24.2005C60.0266 24.2005 61.4148 23.2862 62.2624 21.4842H66.5605C65.5594 25.3484 62.2424 27.8045 58.4382 27.8045C56.2023 27.8045 54.0933 27.0236 52.4448 25.3952C50.7096 23.7 49.9688 21.6577 49.9688 19.2283C49.9688 14.9702 53.6395 11.126 58.2446 11.126C60.4604 11.126 62.2424 11.7333 63.8508 13.1015C65.3725 14.403 66.2869 15.8846 66.5672 17.5331H62.2624Z" fill="white"/>
<path d="M74.4704 27.8709C70.7997 27.8709 67.9766 25.1545 67.9766 21.4638C67.9766 17.7263 70.8664 15.0566 74.4704 15.0566C78.0945 15.0566 80.9643 17.773 80.9643 21.4237C80.9643 25.1946 78.1012 27.8709 74.4704 27.8709ZM77.3603 21.4638C77.3603 19.8553 76.1456 18.4204 74.4504 18.4204C72.862 18.4204 71.5872 19.8086 71.5872 21.4638C71.5872 23.1123 72.8486 24.5071 74.4771 24.5071C76.1657 24.5005 77.3603 23.0655 77.3603 21.4638Z" fill="white"/>
<path d="M92.1294 27.497V26.1955H92.0894C91.4153 27.3034 90.2006 27.8907 88.4854 27.8907C84.8346 27.8907 82.4453 25.0876 82.4453 21.4369C82.4453 17.8329 84.9014 15.0298 88.4186 15.0298C89.8068 15.0298 90.9347 15.4436 91.9559 16.4647V11.4258H95.5599V27.497H92.1294ZM92.1494 21.4169C92.1494 19.7417 90.868 18.4002 89.086 18.4002C87.3908 18.4002 86.0426 19.6616 86.0426 21.4169C86.0426 23.2389 87.3241 24.5203 89.0593 24.5203C90.828 24.5203 92.1494 23.1989 92.1494 21.4169Z" fill="white"/>
<path d="M107.227 27.4975V26.196H107.187C106.666 27.2639 105.231 27.9113 103.649 27.9113C100.085 27.9113 97.6094 25.1081 97.6094 21.4574C97.6094 17.8935 100.192 15.0303 103.649 15.0303C105.124 15.0303 106.493 15.6176 107.187 16.7255H107.227V15.4441H110.831V27.4975H107.227ZM107.227 21.4641C107.227 19.7689 105.859 18.4007 104.163 18.4007C102.515 18.4007 101.207 19.7689 101.207 21.5041C101.207 23.1793 102.528 24.5475 104.203 24.5475C105.905 24.5475 107.227 23.1994 107.227 21.4641Z" fill="white"/>
<path d="M121.976 20.0959C121.456 18.968 120.522 18.4007 119.28 18.4007C117.632 18.4007 116.497 19.7689 116.497 21.4641C116.497 23.226 117.692 24.5275 119.367 24.5275C120.582 24.5275 121.429 23.9669 121.976 22.919H125.647C124.933 25.9357 122.344 27.8912 119.26 27.8912C115.696 27.8912 112.873 25.0014 112.873 21.4374C112.873 17.8334 115.723 15.0303 119.193 15.0303C122.364 15.0303 124.946 17.0258 125.621 20.0892H121.976V20.0959Z" fill="white"/>
<path d="M128.477 31.5146L130.386 26.8894L125.914 15.4434H129.758L132.168 22.4378H132.208L134.51 15.4434H138.335L132.294 31.5146H128.477Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

View file

@ -0,0 +1,22 @@
<svg width="119" height="24" viewBox="0 0 119 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_4606_88092" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="23" height="24">
<path d="M0 18.2795V5.78735C0 4.96001 0.50941 4.21808 1.28152 3.92086L10.7395 0.280117C11.2075 0.0999693 11.7261 0.102202 12.1925 0.286371L21.517 3.96819C22.2807 4.26973 22.7825 5.00738 22.7825 5.82843V18.2216C22.7825 19.0458 22.2769 19.7856 21.509 20.085L12.183 23.7209C11.7222 23.9005 11.2113 23.9031 10.7488 23.7281L1.29224 20.1501C0.514513 19.8558 0 19.111 0 18.2795Z" fill="white" fill-opacity="0.8"/>
<path d="M0 18.2795V5.78735C0 4.96001 0.50941 4.21808 1.28152 3.92086L10.7395 0.280117C11.2075 0.0999693 11.7261 0.102202 12.1925 0.286371L21.517 3.96819C22.2807 4.26973 22.7825 5.00738 22.7825 5.82843V18.2216C22.7825 19.0458 22.2769 19.7856 21.509 20.085L12.183 23.7209C11.7222 23.9005 11.2113 23.9031 10.7488 23.7281L1.29224 20.1501C0.514513 19.8558 0 19.111 0 18.2795Z" fill="#DAEBFB"/>
</mask>
<g mask="url(#mask0_4606_88092)">
<path d="M0 19.6613V4.41431L11.4672 8.83451V24.0001L0 19.6613Z" fill="#E3E3F3"/>
<path d="M11.4673 24L11.4651 8.83431L22.7825 4.4679V19.5885L11.4673 24Z" fill="#BABAE0"/>
<path d="M11.4672 8.83426L0 4.41418L11.4672 0L22.7825 4.46788L11.4672 8.83426Z" fill="#D5D5EC"/>
<path d="M3.34912 16.4117V10.0986L8.06797 11.8841V18.261L6.88826 17.7987V19.2578L5.11869 17.1052L4.52883 16.874L3.34912 16.4117Z" fill="#7474C1"/>
<path d="M3.34912 16.4116L8.06797 14.5912V18.2609L6.88826 17.7985V19.2576L5.11869 17.1051L4.52883 16.8739L3.34912 16.4116Z" fill="#9090CD"/>
</g>
<path d="M37.8107 18.825C40.5441 18.825 42.9285 16.9446 42.9285 13.8817V5.23584H40.2339V13.7072C40.2339 15.5295 39.0708 16.2661 37.8107 16.2661C36.5701 16.2661 35.407 15.5295 35.407 13.7072V5.23584H32.7124V13.8817C32.7124 16.9446 35.0968 18.825 37.8107 18.825Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M49.782 9.30676C48.8903 9.30676 47.4558 9.84956 47.0681 11.0708V9.53939H44.5286V18.5924H47.0681V13.8429C47.0681 12.1952 48.1924 11.7105 49.1035 11.7105C49.9759 11.7105 50.8288 12.3503 50.8288 13.7654V18.5924H53.3683V13.6297C53.3877 10.9157 52.147 9.30676 49.782 9.30676Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M60.396 9.30675C59.3686 9.30675 58.128 9.71385 57.4882 10.625V4.61548H54.9487V18.5924H57.4882V17.468C58.128 18.3985 59.3686 18.825 60.396 18.825C62.7223 18.825 64.8353 16.964 64.8353 14.0562C64.8353 11.1484 62.7223 9.30675 60.396 9.30675ZM59.9114 16.46C58.6707 16.46 57.5658 15.4326 57.5658 14.0562C57.5658 12.6604 58.7289 11.6718 59.9114 11.6718C61.1909 11.6718 62.2377 12.7186 62.2377 14.0562C62.2377 15.3744 61.1909 16.46 59.9114 16.46Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M65.9937 18.5924H68.5332V4.61548H65.9937V18.5924Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M74.5271 18.825C77.1054 18.825 79.3929 16.9252 79.3929 14.0756C79.3929 11.2065 77.1054 9.30676 74.5271 9.30676C71.9489 9.30676 69.6614 11.2065 69.6614 14.0756C69.6614 16.9252 71.9489 18.825 74.5271 18.825ZM74.5271 16.46C73.2671 16.46 72.2396 15.4713 72.2396 14.0756C72.2396 12.6604 73.2671 11.6718 74.5271 11.6718C75.7872 11.6718 76.8146 12.6604 76.8146 14.0756C76.8146 15.4713 75.7872 16.46 74.5271 16.46Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M84.9306 18.825C86.5784 18.825 87.8966 18.069 88.7496 16.8865L86.8304 15.5489C86.4233 16.111 85.6673 16.46 84.95 16.46C83.5155 16.46 82.5462 15.3744 82.5462 14.0368C82.5462 12.7186 83.5155 11.6718 84.95 11.6718C85.6673 11.6718 86.4233 12.0207 86.8304 12.5829L88.7496 11.2453C87.8966 10.0628 86.5784 9.30676 84.9306 9.30676C82.2942 9.30676 79.968 11.1678 79.968 14.0368C79.968 16.9058 82.2942 18.825 84.9306 18.825Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M98.5797 18.5924L94.2568 13.5328L97.7849 9.53938H94.5282L92.2407 12.3115V4.61548H89.7012V18.5924H92.2407V14.6765L95.4199 18.5924H98.5797Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M107.223 13.9205C107.223 11.1484 105.11 9.30676 102.512 9.30676C99.9336 9.30676 97.7043 11.1484 97.7043 14.0756C97.7043 16.8671 99.7398 18.825 102.531 18.825C104.121 18.825 105.691 18.1465 106.544 17.0028L105.071 15.5101C104.509 16.1498 103.617 16.5763 102.686 16.5763C101.485 16.5763 100.632 15.956 100.36 14.8898H107.164C107.203 14.4827 107.223 14.1725 107.223 13.9205ZM100.36 13.242C100.632 12.0207 101.523 11.4973 102.57 11.4973C103.714 11.4973 104.586 12.1758 104.664 13.242H100.36Z" fill="#1f1a38" fill-opacity="0.9"/>
<path d="M115.131 4.61548V10.6443C114.491 9.71385 113.27 9.30675 112.223 9.30675C109.897 9.30675 107.784 11.1484 107.784 14.0562C107.784 16.964 109.897 18.825 112.223 18.825C113.231 18.825 114.491 18.3985 115.131 17.468V18.5924H117.67V4.61548H115.131ZM112.708 16.46C111.428 16.46 110.362 15.3744 110.362 14.0562C110.362 12.7186 111.428 11.6718 112.708 11.6718C113.89 11.6718 115.053 12.6604 115.053 14.0562C115.053 15.4326 113.948 16.46 112.708 16.46Z" fill="#1f1a38" fill-opacity="0.9"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -0,0 +1,28 @@
<svg width="121" height="26" viewBox="0 0 121 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_195_1209)">
<mask id="mask0_195_1209" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="26">
<path d="M0 19.2262V6.8416C0 5.60059 0.764112 4.48769 1.92228 4.04187L11.3308 0.420191C12.0327 0.14997 12.8106 0.153318 13.5103 0.429573L22.7818 4.09048C23.9273 4.54279 24.68 5.64926 24.68 6.88083V19.1697C24.68 20.406 23.9216 21.5157 22.7697 21.9648L13.4959 25.5803C12.8048 25.8497 12.0384 25.8536 11.3446 25.5911L1.93836 22.0321C0.771769 21.5907 0 20.4735 0 19.2262Z" fill="white" fill-opacity="0.8"/>
<path d="M0 19.2262V6.8416C0 5.60059 0.764112 4.48769 1.92228 4.04187L11.3308 0.420191C12.0327 0.14997 12.8106 0.153318 13.5103 0.429573L22.7818 4.09048C23.9273 4.54279 24.68 5.64926 24.68 6.88083V19.1697C24.68 20.406 23.9216 21.5157 22.7697 21.9648L13.4959 25.5803C12.8048 25.8497 12.0384 25.8536 11.3446 25.5911L1.93836 22.0321C0.771769 21.5907 0 20.4735 0 19.2262Z" fill="#DAEBFB"/>
</mask>
<g mask="url(#mask0_195_1209)">
<path d="M12.4225 25.9988L12.4201 9.57005L24.6801 4.83997V21.22L12.4225 25.9988Z" fill="white" fill-opacity="0.5"/>
<path d="M12.4224 9.56999L6.10352e-05 4.78176L12.4224 -6.10352e-05L24.6801 4.83994L12.4224 9.56999Z" fill="white" fill-opacity="0.7"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.10352e-05 4.7818V21.2986L12.4224 25.9988V9.57015L6.10352e-05 4.7818ZM3.62799 10.9396V17.7785L4.90596 18.2793L5.54494 18.5297L7.4619 20.8616V19.281L8.73986 19.7818V12.8739L3.62799 10.9396Z" fill="white" fill-opacity="0.8"/>
<path d="M3.62799 17.7785L8.73986 15.8065V19.7818L7.4619 19.2809V20.8615L5.54494 18.5297L4.90596 18.2793L3.62799 17.7785Z" fill="white" fill-opacity="0.2"/>
</g>
<path d="M32 15.0419V5.67255H34.9202V14.8528C34.9202 16.8274 36.1809 17.6258 37.5254 17.6258C38.87 17.6258 40.1513 16.8274 40.1513 14.8528V5.67255H43.0715V15.0419C43.0715 18.3611 40.4876 20.3989 37.5254 20.3989C34.5633 20.3989 32 18.3611 32 15.0419Z" fill="white"/>
<path d="M53.7442 14.7689V20.1471H50.9919V14.916C50.9919 13.3823 50.0675 12.6891 49.1219 12.6891C48.1762 12.6891 46.9162 13.2145 46.9162 15V20.1471H44.1638V10.3362H46.9162V11.9958C47.3364 10.6725 48.8908 10.0839 49.8571 10.0839C52.4203 10.0839 53.7649 11.8274 53.7436 14.7689H53.7442Z" fill="white"/>
<path d="M65.5302 15.2311C65.5302 18.3824 63.2399 20.3989 60.7193 20.3989C59.6058 20.3989 58.2612 19.9368 57.568 18.9285V20.1472H54.8156V5H57.568V11.5124C58.2612 10.5248 59.6058 10.0839 60.7193 10.0839C63.2406 10.0839 65.5302 12.0798 65.5302 15.2311ZM62.7151 15.2311C62.7151 13.7813 61.5804 12.6472 60.1938 12.6472C58.9125 12.6472 57.6519 13.7187 57.6519 15.2311C57.6519 16.7435 58.8493 17.8363 60.1938 17.8363C61.5384 17.8363 62.7151 16.6596 62.7151 15.2311Z" fill="white"/>
<path d="M66.1396 5H68.892V20.1472H66.1396V5Z" fill="white"/>
<path d="M69.4794 15.2522C69.4794 12.1428 71.9581 10.0844 74.7525 10.0844C77.5468 10.0844 80.0255 12.1435 80.0255 15.2522C80.0255 18.3609 77.5468 20.3994 74.7525 20.3994C71.9581 20.3994 69.4794 18.3403 69.4794 15.2522ZM77.2318 15.2522C77.2318 13.7185 76.1183 12.647 74.7531 12.647C73.3879 12.647 72.2744 13.7185 72.2744 15.2522C72.2744 16.7859 73.3879 17.8361 74.7531 17.8361C76.1183 17.8361 77.2318 16.7646 77.2318 15.2522Z" fill="white"/>
<path d="M80.6348 15.2102C80.6348 12.1009 83.1561 10.0844 86.0131 10.0844C87.7985 10.0844 89.2276 10.9035 90.152 12.1854L88.0722 13.6352C87.6313 13.0259 86.8115 12.6476 86.0344 12.6476C84.4794 12.6476 83.4291 13.7824 83.4291 15.2109C83.4291 16.6393 84.4794 17.8367 86.0344 17.8367C86.8115 17.8367 87.6313 17.4585 88.0722 16.8491L90.152 18.2989C89.2276 19.5802 87.7991 20.4 86.0131 20.4C83.1561 20.4 80.6348 18.3202 80.6348 15.2109V15.2102Z" fill="white"/>
<path d="M96.959 20.1472L93.5133 15.9037V20.1472H90.7609V5H93.5133V13.3404L95.992 10.3363H99.5216L95.6983 14.6643L100.383 20.1478H96.959V20.1472Z" fill="white"/>
<path d="M109.228 16.1346H101.854C102.148 17.29 103.072 17.9626 104.375 17.9626C105.383 17.9626 106.35 17.5004 106.959 16.8072L108.556 18.4248C107.631 19.6642 105.93 20.3994 104.207 20.3994C101.182 20.3994 98.976 18.2776 98.976 15.2522C98.976 12.2268 101.392 10.0844 104.186 10.0844C106.98 10.0844 109.291 12.0802 109.291 15.0844C109.291 15.3574 109.27 15.6937 109.228 16.1346ZM106.518 14.3491C106.434 13.1937 105.488 12.4585 104.249 12.4585C103.114 12.4585 102.148 13.0259 101.854 14.3491H106.518Z" fill="white"/>
<path d="M120.593 5V20.1472H117.841V18.9285C117.148 19.9368 115.782 20.3989 114.69 20.3989C112.168 20.3989 109.879 18.3824 109.879 15.2311C109.879 12.0798 112.169 10.0839 114.69 10.0839C115.825 10.0839 117.148 10.5248 117.841 11.5337V5H120.593ZM117.757 15.2311C117.757 13.7187 116.496 12.6472 115.215 12.6472C113.829 12.6472 112.673 13.782 112.673 15.2311C112.673 16.6803 113.829 17.8363 115.215 17.8363C116.602 17.8363 117.757 16.7228 117.757 15.2311Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_195_1209">
<rect width="121" height="26" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 927 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

View file

@ -0,0 +1,10 @@
<svg width="266" height="363" viewBox="0 0 266 363" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_111_151)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M119.524 5.31219C126.607 -1.77073 138.117 -1.77073 145.2 5.31219C178.844 40.7268 265.61 147.856 265.61 230.195C265.61 303.68 206.29 363 132.805 363C59.3195 363 0 303.68 0 230.195C0 147.856 86.7659 40.7268 119.524 5.31219ZM59.5947 242.88C58.1619 234.744 50.3952 229.074 42.2195 230.195C34.0438 231.316 28.5932 238.799 30.0259 246.935C37.6847 290.425 72.2734 325.622 116.094 334.485C117.821 334.836 119.552 334.864 121.178 334.641C127.269 333.806 132.289 329.26 133.371 322.934C134.756 314.893 129.25 307.054 121.086 305.401C89.7767 299.057 65.0615 273.923 59.5947 242.88Z" fill="#155DFF"/>
</g>
<defs>
<clipPath id="clip0_111_151">
<rect width="266" height="363" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 889 B

View file

@ -0,0 +1,32 @@
# Contribute
HoloLake Era is free and open source, and any kind of help is useful. Pick the path that matches what you want to do.
## Newsletter
[Refactoring](https://refactoring.fm/) is Luca's newsletter and community for engineers building better teams and software with AI. Subscribing is the best way to support HoloLake Era.
## Sponsors
HoloLake Era is supported by a panel of tools Luca uses every day to keep the project healthy, tested, and ready for AI-assisted development:
- [Codacy](https://www.codacy.com/)
- [CodeScene](https://codescene.com/)
- [CircleCI](https://circleci.com/)
- [Unblocked](https://getunblocked.com/)
## Feature Requests
Use the [product board](https://tolaria.canny.io/) for feature ideas. Search first, upvote existing ideas, and create a new post when the request is genuinely new.
## Discussions
Use [GitHub Discussions](https://github.com/refactoringhq/tolaria/discussions) for questions, conversations, show and tell, and broader community context.
## Contribute Code
Small, focused pull requests are welcome. Check the product board first so you build the right thing, then open a PR on [GitHub](https://github.com/refactoringhq/tolaria/pulls). The [contributing guide](https://github.com/refactoringhq/tolaria/blob/main/CONTRIBUTING.md) explains the local workflow.
## Report A Bug
Use [GitHub Issues](https://github.com/refactoringhq/tolaria/issues) for bugs. Include what happened, what you expected, and clear reproduction steps. If you are reporting from inside HoloLake Era, use the Contribute panel to copy sanitized diagnostics and attach them to the issue.

View file

@ -0,0 +1,38 @@
# Docs Maintenance
The public docs live in the app repo so documentation changes can ship with behavior changes.
## Update Docs When You Change
- A Tauri command.
- A new component or hook that changes user behavior.
- A data model or frontmatter convention.
- Git, AI, onboarding, or release behavior.
- Public release pages, download metadata, or updater channels.
- Platform support.
- Keyboard shortcuts.
## Suggested Workflow
1. Make the code change.
2. Update the matching concept, guide, or reference page.
3. Add a troubleshooting page if the change creates a new failure mode.
4. Run `pnpm docs:build`.
5. Check the home page, search, release/download links, and changed docs pages in a browser.
## Page Types
| Type | Purpose |
| --- | --- |
| Start | Helps a new user get into the app. |
| Concepts | Explains mental models. |
| Guides | Teaches workflows. |
| Reference | Gives stable facts and tables. |
| Troubleshooting | Starts from a symptom and ends with recovery. |
## Review Checklist
- Does the page describe current behavior?
- Does it mention macOS primary and Windows/Linux supported-early status when platform support matters?
- Are links relative and VitePress-compatible?
- Can a user discover the page with local search?

View file

@ -0,0 +1,43 @@
# File Layout
HoloLake Era is not opinionated about folder structure. It finds notes recursively across the whole vault, stores new notes in the root by default, and uses types and relationships for real organization.
```txt
my-vault/
project-alpha.md
weekly-review.md
research/
source-notes.md
attachments/
diagram.png
source.pdf
project.md
person.md
views/
active-projects.yml
```
## Root Notes
HoloLake Era works well with a flat vault. Folders are optional and can be useful for compatibility with other tools, but they are not required for people, projects, topics, or any other note category.
Type is not inferred from folder location. It comes from frontmatter, and relationships are expressed with wikilinks in fields. That is what HoloLake Era uses for the sidebar, Properties panel, search, custom views, and neighborhood navigation.
## Special Folders
| Folder | Purpose |
| --- | --- |
| `views/` | Saved custom views. |
| `attachments/` | Images and other attached files. |
PDFs, images, and other non-Markdown files stay as normal files. Folder browsing can show them in place, and Settings controls whether PDFs, images, and unsupported files appear in All Notes.
Whiteboards are Markdown files with durable tldraw data, so they belong with notes rather than in `attachments/`.
Spreadsheets are also Markdown files. A note with `_display: sheet` stores ordinary frontmatter plus a CSV-like body and opens in the sheet editor.
Type definitions are Markdown notes with `type: Type` in frontmatter. New type documents are normal notes, and existing type documents in older folders still work.
## Git Files
If the vault is a Git repository, `.git/` belongs to Git. HoloLake Era reads Git state but does not treat `.git/` as notes.

View file

@ -0,0 +1,30 @@
# Frontmatter Fields
HoloLake Era uses conventions instead of a required schema.
| Field | Meaning |
| --- | --- |
| `type` | The note's entity type. |
| `status` | Lifecycle state. |
| `icon` | Per-note icon. |
| `url` | External URL. |
| `date` | Single date. |
| `belongs_to` | Parent relationship. |
| `related_to` | Lateral relationship. |
| `has` | Contained relationship. |
| `_width` | Per-note editor width override. |
| `_display` | Display mode. Omit for text notes; use `sheet` for spreadsheet notes. |
| `_icon`, `_color` | Type or note appearance metadata. |
| `_sidebar_label`, `_order` | Type sidebar label and order. |
| `_pinned_properties` | Properties pinned for a type. |
| `_sheet` | Sheet-note presentation metadata such as grid settings, column widths, row heights, and cell formatting. |
## Custom Fields
You can add your own fields. If a field contains wikilinks, HoloLake Era can treat it as a relationship.
## System Fields
Fields starting with `_` are reserved for system behavior and hidden from standard property editing. They remain plain YAML, so they can still be inspected or changed in raw mode when needed.
Nested keys under a system field are also system-owned. For example, `_sheet.cells.B6.num_fmt` belongs to the sheet editor and should not appear as a normal user property.

View file

@ -0,0 +1,24 @@
# Keyboard Shortcuts
| Shortcut | Action |
| --- | --- |
| `Cmd+K` / `Ctrl+K` | Open command palette. |
| `Cmd+P` / `Ctrl+P` | Quick open notes and files. |
| `Cmd+N` / `Ctrl+N` | Create a new note. |
| `Cmd+S` / `Ctrl+S` | Save current note. |
| `Cmd+F` / `Ctrl+F` | Find in the current note. |
| `Cmd+Shift+F` / `Ctrl+Shift+F` | Search the vault. |
| `Cmd+Shift+V` / `Ctrl+Shift+V` | Paste without formatting. |
| `Cmd+\` / `Ctrl+\` | Toggle raw Markdown mode. |
| `Cmd+Shift+T` / `Ctrl+Shift+T` | Toggle table of contents. |
| `Cmd+Shift+I` / `Ctrl+Shift+I` | Toggle Properties panel. |
| `Cmd+Shift+L` / `Ctrl+Shift+L` | Toggle AI panel. |
| `Cmd+[` / `Alt+Left` | Navigate back when available. |
| `Cmd+]` / `Alt+Right` | Navigate forward when available. |
| `Cmd+Shift+O` / `Ctrl+Shift+O` | Open current note in a new window. |
| `Cmd+D` / `Ctrl+D` | Toggle favorite for the current note. |
| `Cmd+E` / `Ctrl+E` | Mark the current Inbox note organized. |
Some shortcuts vary by platform because macOS, Linux, and Windows reserve different key combinations.
Use the command palette to discover the current command set.

View file

@ -0,0 +1,36 @@
# Release Channels
HoloLake Era publishes Stable and Alpha release metadata to GitHub Pages.
## Stable
Stable follows manually promoted releases. This is the right channel for normal use.
The stable updater metadata lives at:
```txt
/stable/latest.json
```
The public download page points at the latest stable release.
## Alpha
Alpha follows pushes to `main`. It receives fixes and features earlier, but it can be rougher than Stable.
The alpha updater metadata lives at:
```txt
/alpha/latest.json
```
Compatibility endpoints also point to the alpha metadata:
```txt
/latest.json
/latest-canary.json
```
## Before Switching
Commit or push important vault changes before changing release channel or installing an update. Your notes are local files, but a clean Git state makes recovery simpler.

View file

@ -0,0 +1,162 @@
# Spreadsheet File Format
Sheet notes are Markdown files with YAML frontmatter and a CSV-like body. The note uses `_display: sheet` when it should open in the spreadsheet editor. The `type` field remains ordinary semantic metadata.
For editing workflows, see [Use Spreadsheets](/guides/use-spreadsheets). For formula syntax and function references, see [Spreadsheet Formulas](/reference/spreadsheet-functions).
## Structure
```md
---
type: Project
_display: sheet
tags:
- planning
_sheet:
show_grid_lines: true
frozen_rows: 1
frozen_columns: 1
columns:
A:
width: 180
rows:
"1":
height: 32
cells:
E6:
num_fmt: "0.00%"
bold: true
---
Metric,January,February,March,Q1 Total
Subscriptions,1200,1350,1500,=SUM(B2:D2)
Expenses,650,700,760,=SUM(B3:D3)
Net,=B2-B3,=C2-C3,=D2-D3,=SUM(B4:D4)
Growth,,=(C4-B4)/B4,=(D4-C4)/C4,=(E4-B4)/B4
```
The frontmatter stores note metadata. The body stores rows and cells. There is no Markdown table wrapper, fenced code block, or embedded workbook blob.
## Frontmatter
All ordinary HoloLake Era fields remain available:
- `type`
- `status`
- `date`
- `tags`
- `url`
- relationship fields such as `belongs_to`, `related_to`, and custom wikilink properties
The `_display: sheet` field is the display-as marker. Omit it for ordinary text notes.
The `_sheet` key is reserved for spreadsheet presentation metadata. It follows the same system-field convention as other underscore-prefixed HoloLake Era fields: hidden from normal property editing, but visible and editable in raw source.
## Body
The body is CSV-like text:
- rows are separated by line breaks
- cells are separated by commas
- cells containing commas, quotes, or line breaks are quoted
- quotes inside quoted cells are escaped by doubling them
- empty trailing rows and columns may be omitted on save
Any cell whose input starts with `=` is treated as a formula. Other cells are treated as literal values.
## `_sheet` Metadata
HoloLake Era stores spreadsheet presentation state in `_sheet` as plain YAML.
| Field | Meaning |
| --- | --- |
| `show_grid_lines` | Whether grid lines are shown. |
| `frozen_rows` | Number of frozen rows from the top. |
| `frozen_columns` | Number of frozen columns from the left. |
| `columns.<column>.width` | Custom column width, keyed by column letter such as `A` or `BC`. |
| `rows."<row>".height` | Custom row height, keyed by one-based row number. |
| `cells.<cell>.num_fmt` | Number format code for a cell. |
| `cells.<cell>.bold` | Bold text style. |
| `cells.<cell>.italic` | Italic text style. |
| `cells.<cell>.underline` | Underline text style. |
| `cells.<cell>.strike` | Strikethrough text style. |
| `cells.<cell>.font_size` | Font size. |
| `cells.<cell>.font_color` | Text color. |
| `cells.<cell>.fill_color` | Cell fill color. |
| `cells.<cell>.horizontal_align` | Horizontal alignment. |
| `cells.<cell>.vertical_align` | Vertical alignment. |
| `cells.<cell>.wrap_text` | Text wrapping. |
| `cells.<cell>.border_top` | Top border style. |
| `cells.<cell>.border_right` | Right border style. |
| `cells.<cell>.border_bottom` | Bottom border style. |
| `cells.<cell>.border_left` | Left border style. |
Cell metadata is keyed by A1-style cell addresses such as `A1`, `B12`, or `AA30`.
Border values are stored as a style name with an optional color, for example:
```yaml
border_bottom: "thin #d0d7de"
```
## Number Formats
Number formats are stored in `num_fmt` using spreadsheet-style format codes. Common examples:
| Format | Example output |
| --- | --- |
| `#,##0` | `1,250` |
| `#,##0.00` | `1,250.50` |
| `0.00%` | `12.35%` |
| `$#,##0.00` | `$1,250.50` |
| `yyyy-mm-dd` | `2026-06-15` |
These formats affect presentation, not the underlying cell input in the CSV body.
## Markdown Style Import
When HoloLake Era imports a non-formula CSV cell, simple Markdown wrappers can seed initial styles:
| Cell text | Stored value | Style |
| --- | --- | --- |
| `**Revenue**` | `Revenue` | bold |
| `_Estimate_` | `Estimate` | italic |
| `***Total***` | `Total` | bold and italic |
| `~~Removed~~` | `Removed` | strike |
After save, the style belongs in `_sheet` metadata and the body keeps the unwrapped text.
## Wikilinks
Non-formula cells can store normal HoloLake Era wikilinks:
```csv
Account,Source
Newsletter,[[newsletter-revenue]]
Sponsors,[[sponsorship-pipeline]]
```
Formula cells can reference another sheet note with HoloLake Era's cross-sheet syntax:
```txt
=[[newsletter-revenue]].B5
=ROUND([[business-plan]].$E$12, 2)
=[[device]].power.watts
```
Cross-sheet cell references resolve another sheet note by wikilink target, then read a single A1-style cell. Frontmatter references resolve one note by wikilink target, then read a scalar property path after the dot. Missing, ambiguous, circular, very deep, or non-scalar references are treated as unresolved and surface as spreadsheet errors.
## Guidance For Agents And Scripts
When editing a sheet note programmatically:
- preserve the YAML frontmatter delimiter and ordinary HoloLake Era fields
- keep `_display: sheet` when the file should display as a spreadsheet
- keep spreadsheet presentation state under `_sheet`
- parse and serialize the body as CSV, not by splitting on every comma manually
- preserve formulas as formulas, including `[[sheet]].A1` and `[[note]].property.path` references
- avoid converting formulas to their displayed values
- quote CSV cells when they contain commas, quotes, or line breaks
- do not add workbook tabs inside one note; create another note with `_display: sheet` instead
- do not store opaque binary workbook state in the Markdown file
If a script cannot safely preserve `_sheet`, it should leave that block untouched and edit only the CSV body cells it understands.

View file

@ -0,0 +1,186 @@
# Spreadsheet Formulas
Formula cells start with `=` and are evaluated by IronCalc through HoloLake Era's sheet editor.
HoloLake Era adds vault-aware sheet references on top of the normal spreadsheet formula model. Everything else should be treated as IronCalc formula behavior. IronCalc aims for Excel-compatible formulas, but the upstream project is still evolving, so verify advanced formulas against the IronCalc docs when precision matters.
## Basic Syntax
| Syntax | Meaning |
| --- | --- |
| `=B2+B3-B4` | Arithmetic over cells. |
| `=SUM(B2:D2)` | Function call over a range. |
| `=ROUND(E6, 2)` | Function call with arguments. |
| `=IF(E6>0, "Up", "Down")` | Conditional expression. |
| `=$B$2` | Absolute column and row reference. |
| `=B$2` | Relative column, absolute row. |
| `=$B2` | Absolute column, relative row. |
| `=B2:D10` | A range in the current sheet note. |
| `="Q" & 1` | Text concatenation. |
Use parentheses when a model depends on precedence:
```txt
=(B2+B3-B4)/B5
```
## HoloLake Era Note References
HoloLake Era supports wikilink cell references for values that live in another sheet note:
```txt
=[[newsletter-revenue]].B5
=SUM(B2:D2)+[[sponsorship-pipeline]].E12
=ROUND([[business-plan]].$E$12, 2)
```
The target inside `[[...]]` resolves like a normal HoloLake Era wikilink. The cell address after the dot uses A1 notation.
Absolute markers follow spreadsheet copy behavior:
| Reference | Copy behavior |
| --- | --- |
| `[[revenue]].B5` | row and column can shift |
| `[[revenue]].$B$5` | row and column stay fixed |
| `[[revenue]].B$5` | row fixed, column can shift |
| `[[revenue]].$B5` | column fixed, row can shift |
Cross-sheet cell references currently resolve single cells. Keep range formulas inside one sheet note until cross-note ranges are explicitly supported.
Formulas can also read scalar frontmatter properties from a specific note:
```txt
=[[device.md]].power.watts
=[[project-alpha]].status
=[[book-notes/the-design-of-everyday-things.md]].rating
```
The target resolves like a wikilink, and the dot path reads nested frontmatter keys. Numbers, booleans, and strings become formula literals. Missing notes, ambiguous note targets, missing properties, arrays, maps, and other non-scalar values resolve to `#N/A`.
A first segment that looks like an A1 cell address, such as `B2`, is treated as a cross-sheet cell reference. Use property names that do not collide with A1 notation for frontmatter formulas.
## Autocomplete Functions
HoloLake Era's formula autocomplete exposes the implemented function catalog from the bundled IronCalc engine. The current catalog has 195 functions.
The dropdown shows a small ranked set of matches while you type. Keep typing to narrow the result list. Function names with digits and dots, such as `BIN2DEC` and `ERFC.PRECISE`, are supported.
### Logical
`AND`, `FALSE`, `IF`, `IFERROR`, `IFNA`, `IFS`, `NOT`, `OR`, `SWITCH`, `TRUE`, `XOR`
### Math and trigonometry
`ABS`, `ACOS`, `ACOSH`, `ASIN`, `ASINH`, `ATAN`, `ATAN2`, `ATANH`, `COS`, `COSH`, `PI`, `POWER`, `PRODUCT`, `RAND`, `RANDBETWEEN`, `ROUND`, `ROUNDDOWN`, `ROUNDUP`, `SIN`, `SINH`, `SQRT`, `SQRTPI`, `SUM`, `SUMIF`, `SUMIFS`, `TAN`, `TANH`, `SUBTOTAL`
### Lookup and reference
`CHOOSE`, `COLUMN`, `COLUMNS`, `HLOOKUP`, `INDEX`, `INDIRECT`, `LOOKUP`, `MATCH`, `OFFSET`, `ROW`, `ROWS`, `VLOOKUP`, `XLOOKUP`
### Text
`CONCAT`, `CONCATENATE`, `EXACT`, `FIND`, `LEFT`, `LEN`, `LOWER`, `MID`, `REPT`, `RIGHT`, `SEARCH`, `SUBSTITUTE`, `T`, `TEXT`, `TEXTAFTER`, `TEXTBEFORE`, `TEXTJOIN`, `TRIM`, `UNICODE`, `UPPER`, `VALUE`, `VALUETOTEXT`
### Information
`ERROR.TYPE`, `FORMULATEXT`, `ISBLANK`, `ISERR`, `ISERROR`, `ISEVEN`, `ISFORMULA`, `ISLOGICAL`, `ISNA`, `ISNONTEXT`, `ISNUMBER`, `ISODD`, `ISREF`, `ISTEXT`, `NA`, `SHEET`, `TYPE`
### Statistical
`AVERAGE`, `AVERAGEA`, `AVERAGEIF`, `AVERAGEIFS`, `COUNT`, `COUNTA`, `COUNTBLANK`, `COUNTIF`, `COUNTIFS`, `GEOMEAN`, `MAX`, `MAXIFS`, `MIN`, `MINIFS`
### Date and time
`DATE`, `DAY`, `EDATE`, `EOMONTH`, `MONTH`, `NOW`, `TODAY`, `YEAR`
### Financial
`CUMIPMT`, `CUMPRINC`, `DB`, `DDB`, `DOLLARDE`, `DOLLARFR`, `EFFECT`, `FV`, `IPMT`, `IRR`, `ISPMT`, `MIRR`, `NOMINAL`, `NPER`, `NPV`, `PDURATION`, `PMT`, `PPMT`, `PV`, `RATE`, `RRI`, `SLN`, `SYD`, `TBILLEQ`, `TBILLPRICE`, `TBILLYIELD`, `XIRR`, `XNPV`
### Engineering
`BESSELI`, `BESSELJ`, `BESSELK`, `BESSELY`, `BIN2DEC`, `BIN2HEX`, `BIN2OCT`, `BITAND`, `BITLSHIFT`, `BITOR`, `BITRSHIFT`, `BITXOR`, `COMPLEX`, `CONVERT`, `DEC2BIN`, `DEC2HEX`, `DEC2OCT`, `DELTA`, `ERF`, `ERF.PRECISE`, `ERFC`, `ERFC.PRECISE`, `GESTEP`, `HEX2BIN`, `HEX2DEC`, `HEX2OCT`, `IMABS`, `IMAGINARY`, `IMARGUMENT`, `IMCONJUGATE`, `IMCOS`, `IMCOSH`, `IMCOT`, `IMCSC`, `IMCSCH`, `IMDIV`, `IMEXP`, `IMLN`, `IMLOG10`, `IMLOG2`, `IMPOWER`, `IMPRODUCT`, `IMREAL`, `IMSEC`, `IMSECH`, `IMSIN`, `IMSINH`, `IMSQRT`, `IMSUB`, `IMSUM`, `IMTAN`, `OCT2BIN`, `OCT2DEC`, `OCT2HEX`
## Examples
### Totals
```txt
=SUM(B2:D2)
=B2+B3-B4
=SUM(B2:D2)-SUM(B4:D4)
```
### Growth And Percentages
```txt
=(C5-B5)/B5
=IF(B5=0, 0, (C5-B5)/B5)
=ROUND((C5-B5)/B5, 4)
```
Format the result as a percentage with a cell `num_fmt` such as `0.00%`.
### Conditional Logic
```txt
=IF(E5>10000, "On track", "Review")
=IFS(E5>10000, "High", E5>5000, "Medium", TRUE, "Low")
=IFERROR(B5/B4, 0)
```
### Dates
```txt
=TODAY()
=DATE(2026, 6, 15)
=YEAR(TODAY())
=MONTH(TODAY())
```
### Text
```txt
=CONCAT(A2, " - ", B2)
=UPPER(A2)
=TRIM(A2)
=TEXT(B2, "$#,##0.00")
```
### Lookup
```txt
=INDEX(B2:E10, 3, 2)
=MATCH("Revenue", A2:A20, 0)
=VLOOKUP("Revenue", A2:E20, 5, FALSE)
=XLOOKUP("Revenue", A2:A20, E2:E20)
```
### Cross-Sheet Model
```txt
=[[newsletter-revenue]].E5
=SUM(B2:D2)+[[sponsorship-pipeline]].E12
=IF([[business-plan]].$E$12>0, [[business-plan]].$E$12, 0)
```
## IronCalc Function Families
IronCalc documents formulas by category. Use these upstream pages for detailed syntax and examples. The upstream documentation may include newer functions that are not yet present in HoloLake Era's bundled IronCalc version.
| Family | Link |
| --- | --- |
| Lookup and reference | [IronCalc lookup and reference](https://docs.ironcalc.com/functions/lookup-and-reference.html) |
| Financial | [IronCalc financial](https://docs.ironcalc.com/functions/financial.html) |
| Engineering | [IronCalc engineering](https://docs.ironcalc.com/functions/engineering.html) |
| Database | [IronCalc database](https://docs.ironcalc.com/functions/database.html) |
| Statistical | [IronCalc statistical](https://docs.ironcalc.com/functions/statistical.html) |
| Text | [IronCalc text](https://docs.ironcalc.com/functions/text.html) |
| Math and trigonometry | [IronCalc math and trigonometry](https://docs.ironcalc.com/functions/math-and-trigonometry.html) |
| Logical | [IronCalc logical](https://docs.ironcalc.com/functions/logical.html) |
| Date and time | [IronCalc date and time](https://docs.ironcalc.com/functions/date-and-time.html) |
| Information | [IronCalc information](https://docs.ironcalc.com/functions/information.html) |
IronCalc also documents [value types](https://docs.ironcalc.com/features/value-types.html), [error types](https://docs.ironcalc.com/features/error-types.html), [optional arguments](https://docs.ironcalc.com/features/optional-arguments.html), and [formatting values](https://docs.ironcalc.com/features/formatting-values.html).
For current upstream gaps, see IronCalc's [unsupported features](https://docs.ironcalc.com/features/unsupported-features.html).

View file

@ -0,0 +1,23 @@
# Supported Platforms
HoloLake Era is a desktop app built with Tauri. Releases currently target macOS, Windows, and Linux.
| Platform | Current support | Notes |
| --- | --- | --- |
| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. |
| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. |
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. |
## Support Policy
Primary support means the platform is part of normal development and release validation. Supported, early means release artifacts exist and the app is expected to work, but platform-specific bugs can take longer to diagnose than macOS issues.
## Reporting Platform Bugs
Include:
- HoloLake Era version.
- Operating system and version.
- CPU architecture.
- Whether the vault is local-only or connected to a remote.
- Steps to reproduce.

View file

@ -0,0 +1,33 @@
# View Filters
View filters define saved lists of notes.
## Common Filter Ideas
| Goal | Filter direction |
| --- | --- |
| Active projects | `type` is Project and `status` is Active |
| Drafts | `type` is Article and `status` is Draft |
| People follow-up | `type` is Person and date is before today |
| Recent work | modified date is within a recent range |
## Sorting
Useful sorts include:
- Recently modified first.
- Title ascending.
- Status ascending.
- A custom property ascending or descending.
## Operators
Saved views can combine filters for text, dates, relationship fields, and frontmatter values. Relative date expressions are useful for views such as notes changed this week or people that need follow-up.
Regex filters are available for power-user cases. Keep them narrow and test them on a small view first.
## Keep Views Focused
A view should answer one recurring question. If it becomes too broad, split it into two views.
You can also customize view appearance with the same kind of icon and color controls used by types.

View file

@ -0,0 +1,35 @@
# First Launch
The first launch flow is designed to get you into a real vault quickly without hiding the local-first model.
## What You Choose
HoloLake Era asks whether you want to:
- Create or clone the Getting Started vault.
- Open an existing local vault.
- Create a new empty vault.
The Getting Started vault is cloned locally and then disconnected from its remote. That keeps the sample safe to edit without accidentally pushing tutorial changes.
## What HoloLake Era Creates
HoloLake Era stores app-level settings on the local machine. Your notes stay in the vault folder you choose.
| Data | Stored in |
| --- | --- |
| Notes and attachments | Your vault folder |
| Type definitions and saved views | Your vault folder |
| Window size, zoom, recent vaults | Local app settings |
| Cache data | Rebuildable local cache |
## First Commands To Try
- `Cmd+K` / `Ctrl+K`: open the command palette.
- `New Note`: create a note in the current vault.
- `Open Getting Started Vault`: clone the public sample vault.
- `Reload Vault`: rescan files after external edits.
## AI Setup Prompt
HoloLake Era can show an optional AI agents prompt after a vault is open. It checks common local install locations for supported coding agents and gives you setup paths, but you can dismiss it and use HoloLake Era without AI.

View file

@ -0,0 +1,32 @@
# Getting Started Vault
The Getting Started vault is a small public sample vault hosted at [refactoringhq/tolaria-getting-started](https://github.com/refactoringhq/tolaria-getting-started).
It exists to show HoloLake Era's conventions without requiring you to restructure your own notes first.
## What It Demonstrates
- Markdown notes with YAML frontmatter.
- Types such as Project, Person, Topic, and Procedure.
- Wikilinks in note bodies.
- Relationship fields in frontmatter.
- A local Git repository that can be connected to a remote later.
- Vault guidance files for AI agents.
## Local-Only By Default
When HoloLake Era clones the sample, it removes the remote from the local copy. This makes the sample vault disposable. You can edit it freely, commit locally, and delete it later.
To connect a vault to your own remote, use the bottom status bar remote chip or run `Add Remote` from the command palette.
HoloLake Era also repairs starter-vault guidance files when needed. `AGENTS.md` is the canonical guidance file, `CLAUDE.md` is kept as a compatibility shim, and `GEMINI.md` is only created when you explicitly restore Antigravity/Gemini guidance.
## Use It Alongside Your Own Vaults
You can keep the Getting Started vault open while working in your own notes. Enable `Settings` -> `Vaults` -> `Use multiple vaults at the same time`, then use the bottom-left vault menu to include both the sample vault and your real vault in the unified graph.
This lets search, quick open, note lists, backlinks, and wikilink navigation span both vaults. Git actions still stay scoped to each vault's own repository, and new notes go to the default vault you choose in `Manage vaults`.
## When To Move On
After you understand the sample, open your own vault. HoloLake Era does not require a special folder structure: a folder of Markdown files is enough to start. You can remove the sample from HoloLake Era's vault list later without deleting its files from disk.

View file

@ -0,0 +1,40 @@
# Install HoloLake Era
HoloLake Era publishes desktop builds for macOS, Windows, and Linux. macOS is the primary day-to-day development target, with Windows and Linux builds supported through the release pipeline and fixed as platform issues are found.
## Download
Use the latest stable release unless you are intentionally testing pre-release builds:
- <a href="https://tolaria.md/download/" target="_self">Download the latest stable build</a>
- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases)
- <a href="https://tolaria.md/releases/" target="_self">Read the release notes</a>
## Homebrew
On macOS you can install the cask:
```bash
brew install --cask tolaria
```
## Platform Status
| Platform | Status | Notes |
| --- | --- | --- |
| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. |
| Windows | Supported, early | NSIS installers and updater bundles are Tauri-signed. Authenticode publisher signing will be added after Windows certificate provisioning; company-managed SmartScreen, Defender, or WDAC policies can still require IT approval before install. |
| Linux | Supported, early | AppImage, deb, and RPM artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. |
See [Supported Platforms](/reference/supported-platforms) for the current support policy.
## Managed Windows Devices
Do not disable SmartScreen or Windows Security to install HoloLake Era. On a managed Windows device, install HoloLake Era through your normal software approval path if policy blocks unsigned or unknown-publisher installers. After Authenticode provisioning is complete, validate that the downloaded installer has a valid HoloLake Era publisher signature before installing.
## After Installing
1. Open HoloLake Era.
2. Choose the Getting Started vault if you want a guided sample.
3. Or open an existing folder of Markdown files as a vault.
4. Use the command palette with `Cmd+K` on macOS or `Ctrl+K` on Linux and Windows.

View file

@ -0,0 +1,30 @@
# Open Or Create A Vault
A HoloLake Era vault is a folder on disk. The folder can contain Markdown notes, attachments, type definitions, saved views, and Git metadata.
## Open An Existing Folder
Choose an existing folder if you already have Markdown notes. HoloLake Era scans `.md` files and uses frontmatter when it exists.
Good starting points:
- A folder of plain Markdown files.
- An Obsidian-style vault.
- A Git repository containing notes.
- A copy of the Getting Started vault.
## Create A New Vault
Choose a new empty folder if you want HoloLake Era conventions from the start. New notes and optional type definitions are created as Markdown files.
## Use More Than One Vault
You do not have to merge everything into one folder. Register each local folder as its own vault, then turn on `Use multiple vaults at the same time` in `Settings` -> `Vaults`.
Once enabled, the bottom-left vault menu lets you include vaults in the unified graph. Search, quick open, wikilinks, and note lists can span the included vaults, while Git sync and commits remain tied to each vault's own repository.
## Git Is Recommended, Not Required
HoloLake Era works well with a plain folder of Markdown files. You can open, edit, organize, and search notes without making the vault a Git repository.
Git is recommended when you want local history, diff views, recovery, pull, push, and remote sync without a proprietary backend. If a vault is not already a repository, HoloLake Era can initialize one when you explicitly ask it to.

View file

@ -0,0 +1,72 @@
# Portent
[Portent](https://portent.md) is an open specification and template for work and personal knowledge bases.
It gives a HoloLake Era vault a small set of defaults for organizing information: clear types, generic graph-like relationships, and a simple lifecycle for captured knowledge. The goal is to make a knowledge base useful to humans and AI agents without forcing every person or team to design a private ontology first.
## Core Questions
Portent favors convention over configuration. Instead of asking "where should this go?", it asks:
- What is this?
- What is it useful for?
- Is it captured, organized, or archived?
Those questions map naturally to HoloLake Era's type documents, relationship fields, Inbox, organized state, archive behavior, and custom views.
## Types
Portent defines eight default types.
PORT types are actionable:
- Project
- Operation
- Responsibility
- Task
ENTP types are non-actionable knowledge records:
- Event
- Note
- Topic
- Person
These defaults are meant to cover the common shape of personal and work knowledge with almost no setup. You can add custom types later, but Portent works best when the default vocabulary comes first.
## Relationships
Portent models knowledge as a graph. The two default relationships are:
- `belongs_to`: primary ownership, composition, or context.
- `related_to`: a looser semantic connection.
In HoloLake Era, these relationships can live in YAML frontmatter and point to other notes with wikilinks. That keeps the graph portable, searchable, and readable outside the app.
## Lifecycle
Portent separates capture from organization:
1. Capture information quickly so it is not lost.
2. Organize it by assigning a type and useful relationships.
3. Archive it when it has served its purpose.
HoloLake Era supports that lifecycle directly: the Inbox holds captured notes, organizing a note marks it ready for normal views, and archiving hides old or obsolete notes from active surfaces while keeping them available.
## Why Use It
A blank vault is flexible, but it also asks you to make structural decisions before you have momentum. Portent gives you enough structure to start capturing, organizing, and retrieving notes immediately.
Because Portent is file-friendly and portable, the same model can work across local Markdown vaults, note apps, docs tools, and agent-readable knowledge bases. HoloLake Era is the first intended implementation, but the spec is not tied to HoloLake Era internals.
## Start From The Template
The fastest starting point is the Portent template vault:
- [refactoringhq/portent-vault-template](https://github.com/refactoringhq/portent-vault-template)
Use it as-is, rename pieces to match your language, or treat it as a reference model for your own HoloLake Era setup.
## Learn More
Visit [portent.md](https://portent.md) for the full spec, examples, and implementation notes.

View file

@ -0,0 +1,23 @@
# AI Agent Not Found
HoloLake Era can only launch local CLI agents that are installed and discoverable.
## Symptoms
- The AI panel says no supported agent is available.
- Claude Code or another agent works in one shell but not in HoloLake Era.
## Checks
Open a terminal and run the agent command directly. For Claude Code:
```bash
claude --version
```
If the command fails, install or repair the agent first.
## Path Issues
Desktop apps can inherit a different `PATH` from your interactive shell. HoloLake Era checks common install locations, but shell setup can still vary. Prefer installing CLI tools in standard locations or making them available from your login shell.

View file

@ -0,0 +1,26 @@
# Git Authentication
HoloLake Era uses system Git authentication. It does not manage provider passwords directly.
## Symptoms
- Push fails.
- Pull asks for credentials repeatedly.
- Remote fetch works in one terminal but not in HoloLake Era.
## Checks
1. Open a terminal.
2. `cd` into the vault.
3. Run `git remote -v`.
4. Run `git fetch`.
If `git fetch` fails in the terminal, fix system Git auth first.
## Common Fixes
- Sign in with GitHub CLI.
- Configure SSH keys.
- Update the remote URL.
- Check your credential helper.

View file

@ -0,0 +1,25 @@
# Model Provider Connection
Use this checklist when a local or API model provider does not connect.
## Local Providers
For Ollama or LM Studio:
1. Start the local model server.
2. Confirm the base URL in HoloLake Era matches the server.
3. Confirm the model ID is installed and loaded by the provider.
4. Use the Settings test action again.
## API Providers
For hosted providers:
1. Confirm the provider kind and endpoint.
2. Confirm the model ID exists for your account.
3. Confirm the API key is saved locally or available in the configured environment variable.
4. Avoid storing secrets in the vault.
## Chat Mode Boundary
Direct model targets run in chat mode. If you need file-editing tools, use a coding agent target such as Claude Code, Codex, OpenCode, Pi, or Antigravity CLI.

View file

@ -0,0 +1,20 @@
# Sync Conflicts
Sync conflicts happen when local and remote changes touch the same content.
## What To Do
1. Stop editing the conflicted note.
2. Open the conflict resolver if HoloLake Era presents it.
3. Review both sides.
4. Choose the correct content or merge manually.
5. Commit the resolved file.
6. Push again.
## Prevent Conflicts
- Pull before starting work on another device.
- Push after meaningful sessions.
- Keep AI-generated edits in small commits.
- Avoid editing the same note on multiple devices at the same time.

View file

@ -0,0 +1,25 @@
# Vault Not Loading
Use this checklist when HoloLake Era cannot open or refresh a vault.
## Check The Folder
- Confirm the folder exists.
- Confirm the folder contains readable files.
- Confirm HoloLake Era has permission to access the folder.
- Try opening a smaller test vault to isolate the issue.
## Check Git
If the vault is a Git repository, verify it is not in a broken state:
```bash
git status
```
Resolve interrupted merges or corrupted repository state before retrying.
## Reload
Run `Reload Vault` from the command palette. This clears derived cache and rescans the filesystem.