Published empty on purpose: identity is the expensive part to change later, the feature is the cheap part to add. One route, two placeholder panels, no tables and no sidecar.
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import type { PluginManifest } from "@@/plugins/manifest";
|
|
|
|
/**
|
|
* Finances.
|
|
*
|
|
* The skeleton, published before the feature so that the repository, the mount prefix and the permission
|
|
* key exist and are stable while the rest is still being decided.
|
|
*
|
|
* What it does NOT ship yet, and why each is an absence rather than a stub:
|
|
*
|
|
* db/ no tables until the data model is settled. A table added is easy; a table renamed after
|
|
* someone has rows in it is not.
|
|
* sidecar/ no process. Nothing here is long-lived yet — an importer or a rates poller would be.
|
|
*/
|
|
export const manifest: PluginManifest = {
|
|
publisher: "officerdev",
|
|
version: "2026.08.27.01",
|
|
platform: ">=1.0.0",
|
|
|
|
label: "Finances",
|
|
summary: "Money, on your own machine.",
|
|
tags: ["Personal"],
|
|
icon: "Wallet",
|
|
color: "#059669",
|
|
|
|
/**
|
|
* One key gating the whole surface.
|
|
*
|
|
* Finances is the kind of data where "read" is already a strong grant, so a second key splitting
|
|
* read from write would say less than it looks like it says. One, until there is a surface that
|
|
* genuinely divides.
|
|
*/
|
|
permissions: [
|
|
{
|
|
key: "finances",
|
|
label: "Finances",
|
|
description: "Accounts, balances and transactions",
|
|
},
|
|
],
|
|
};
|