Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

TrestleBoard

A desktop editor for producing a Masonic lodge's monthly trestle board newsletter — lay out text, tables and photographs on a page, fill the recurring sections with step-by-step wizards, and export the PDF you email round.

Built for Indian Land Lodge 414's trestle board committee, with accessibility for elderly users as a first-class requirement rather than a settings page at the end.

donaldsteele.github.io/TrestleBoard — what it does, how to install it, help pages for the committee, and a reference for every command.

The TrestleBoard editor showing the front page of a newsletter: a cover heading, an article, and a photograph with the text flowing around it. Down the left is a column of small pages; down the right, a panel listing what this issue still needs.

Installing

Downloads for Windows, macOS and Linux are on the releases page. The install page walks through it in plain language, including the SmartScreen and Gatekeeper warnings that appear because the app is not code-signed. Installed copies update themselves from that same releases page.

What makes it different from a word processor

A trestle board is a page, not a document. Blocks go anywhere and the body text flows around them, so a photograph dropped into an article pushes the words aside and they close up behind it. The app draws its own pages on a SkiaSharp/HarfBuzzSharp layout engine, and the same renderer draws the editor and the PDF — what you arrange is what prints, on every machine that opens it.

The officers table, the birthday list, the committees and the district calendar are not typed as tables. A wizard asks one question per screen in large type, reads back what it is about to write, and lays it out for you — and the lodge's address book fills most of it in.

There is a tour with a picture of each part.

Built for the people who use it

Choose something on the page and what you can do to it appears beside it, each with a sentence saying what it is for. Nothing in that panel is ever greyed out: an action that does not apply is not shown, and one that is blocked says why in plain words.

The editor with a photograph selected. A panel down the right-hand side is headed "A photo is selected" and lists what can be done to it, each with a short explanation.

Every command has a keyboard path and a menu entry, dragging is always an accelerator and never the only way, chrome text is 16 point at minimum, hit targets are at least 44 pixels, an icon never appears without its label, and colour is never the only signal. There is a true high-contrast theme and the whole interface scales to 200% without the page changing, because the page is paper and has its own zoom. Each of those is a test that fails the build.

The accessibility page states all of it with the screenshots.

Architecture, in one screen

  • Platforms: Windows, Linux, macOS (.NET 10 + Avalonia). TrestleBoard.App is the only project that references Avalonia.
  • Rendering: one SkiaSharp/HarfBuzzSharp layout engine shared by the canvas and PDF export.
  • File format:.tboard — a zip container holding the document and the untouched original of every photograph in it.
  • Fonts: bundled only, never the ones installed on your computer. Static instances, each recorded in a manifest with its SHA-256, which is what lets a newsletter paginate identically on all three operating systems and in CI.
  • Commands: every action is declared once in ActionCatalog, which answers "can I, and if not, why not, in plain English". The menu bar, the action panel, the keyboard table, the in-app help and the website's command reference are all views of that one declaration.

PLAN.md is the full architecture and milestone plan; docs/M*-spec.md is one document per milestone explaining what was built and what was deliberately left out.

Building

Requires the .NET 10 SDK (pinned in global.json).

dotnet build TrestleBoard.slnx
dotnet test TrestleBoard.slnx
dotnet run --project src/TrestleBoard.App

Two tools sit beside it. tools/TrestleBoard.Screenshots generates every image under docs/images/ against fictional fixtures — the screenshots in this file were not taken by hand. tools/TrestleBoard.Site builds the website into site/_site, generating the command reference from ActionCatalog and drawing the emblems from EmblemLibrary, so neither can describe a version of the program that no longer exists.

Licence

TrestleBoard is free for non-profit use, under the PolyForm Noncommercial License 1.0.0. A lodge, a church, a charity, a school, a public body or a person at home may use it, copy it, change it and pass it on, at no cost and without asking. Making money with it — selling it, selling a service built on it, or using it in the running of a for-profit business — needs a separate licence; ask for one by opening an issue.

The licence is compiled into the application so that it travels with every installed copy, and is reachable from Help → Licence.

The twenty bundled typefaces are somebody else's work and a separate matter: they are used under the SIL Open Font License 1.1, with designers, upstream sources and pinned versions listed in docs/FONTS.md. Their full licence text ships inside the installer and is reachable from Help → Fonts and licences — the OFL requires that of anything redistributing the fonts.

Nothing here grants any right in the names, arms or symbols of Indian Land Masonic Lodge 414 or of any Grand Lodge.

About

Cross-platform desktop editor for a Masonic lodge's monthly trestle board newsletter (.NET 10 + Avalonia + SkiaSharp)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages