Repository navigation
Expand file tree
/
Copy pathquick-start.html
More file actions
39 lines (37 loc) · 43 KB
/
Copy pathquick-start.html
File metadata and controls
39 lines (37 loc) · 43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html lang="zh-Hant" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Quick Start | Developer Guide</title>
<meta name="description" content="StrawMoneyBook 官方開發者技術文件:架構、模組協作與功能域指南">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.7UNe3_zg.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.CO7IZeOb.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.BccmmSJ_.js">
<link rel="modulepreload" href="/assets/chunks/framework.mRCPFc5l.js">
<link rel="modulepreload" href="/assets/quick-start.md.CH2Xo4Oj.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>StrawMoneyBook</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guide/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Guide</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/architecture/overview.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Architecture</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/domains/bookkeeping.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Domains</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/operations/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Operations</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/StrawCoding/StrawMoneyBook" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>GitHub</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/StrawCoding/StrawMoneyBookWiki" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/StrawCoding/StrawMoneyBookWiki" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Introduction</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>What is StrawMoneyBook?</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guide/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Documentation Hub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/quick-start.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Quick Start</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/open-source-and-license.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Open Source & License</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Architecture</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/architecture/overview.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/architecture/application-layers.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Application Layers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/architecture/startup-and-runtime.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Startup & Runtime</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/architecture/ledger-lifecycle.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Ledger Lifecycle</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Core Guide</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guide/data-model-and-storage.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Data Model & Storage</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guide/frontend-stack.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Frontend Stack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guide/backend-api.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Backend API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guide/authentication.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Authentication</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Feature Domains</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/bookkeeping.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Bookkeeping</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/budget.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Budget</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/assets.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Assets</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/loans-reimbursements-claims.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Loans, Reimbursements & Claims</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/analysis-reports.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Analysis & Reports</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/sync-backup-shared-ledger.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Sync, Backup & Shared Ledger</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/membership.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Membership</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/bank-sync-einvoice.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Bank Sync & E-Invoice</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/domains/android-capacitor.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Android & Capacitor</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Operations</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Home</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/open-source-and-license.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Open Source & License</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/optimization-plan.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Optimization Plan</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/local-dev-quickstart.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Local Dev</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/environment-variables.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Environment Variables</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/closeout-and-versioning.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Closeout & Versioning</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/long-task-worker.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Long-Task Worker</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/playwright-app-shell.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Playwright App Shell</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/testing-and-verification.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Testing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/ci-cd-and-gates.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>CI / CD Gates</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/release-process.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Release Process</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/android-release-and-play-upload.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Android Play Upload</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/android-native-bank-apk.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Native Bank APK</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/payroll-cycle-budget.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Payroll Cycle Budget</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/wear-companion.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Wear Companion</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/sync-architecture-b.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Sync Architecture B</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/sync-operations-runbooks.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Sync Runbooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/backend-deployment-and-health.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Backend Deploy</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/backups-and-restore.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Backups & Restore</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/auth-and-security-operations.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Auth & Security</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/troubleshooting.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Troubleshooting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/operations/technical-optimization.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Technical Optimization</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _quick-start" data-v-39a288b8><div><h1 id="quick-start" tabindex="-1">Quick Start <a class="header-anchor" href="#quick-start" aria-label="Permalink to "Quick Start""></a></h1><h2 id="概述" tabindex="-1">概述 <a class="header-anchor" href="#概述" aria-label="Permalink to "概述""></a></h2><p>StrawMoneyBook 是 npm monorepo:<code>frontend/</code> 為 Vue 3 + Capacitor App(本機 SQLite),<code>backend/</code> 為 Node.js 共同帳本與帳號 API。本頁說明 <strong>最短時間</strong> 在本機跑起前端 dev server;CI、Play 發版、Docker 部署見 <a href="/guide/">Operations 文件中心</a>。</p><table tabindex="0"><thead><tr><th>項目</th><th>說明</th></tr></thead><tbody><tr><td>原始碼</td><td><a href="https://github.com/StrawCoding/StrawMoneyBook" target="_blank" rel="noreferrer">StrawCoding/StrawMoneyBook</a>(公開)</td></tr><tr><td>授權</td><td><a href="/operations/open-source-and-license.html">PolyForm Noncommercial 1.0.0</a> — 可研究與非商用散布,<strong>禁止第三方商用</strong></td></tr><tr><td>官方 API</td><td>預設 <code>https://api.strawmb.com</code>(dev 可不啟本機 backend)</td></tr><tr><td>完整索引</td><td><a href="/guide/">文件中心 /guide/</a></td></tr></tbody></table><h2 id="_01-·-需求" tabindex="-1">01 · 需求 <a class="header-anchor" href="#_01-·-需求" aria-label="Permalink to "01 · 需求""></a></h2><table tabindex="0"><thead><tr><th>工具</th><th>版本</th></tr></thead><tbody><tr><td>Node.js</td><td><code>^20.19.0 || >=22.12.0</code></td></tr><tr><td>npm</td><td>隨 Node 附帶</td></tr><tr><td>Git</td><td>建議最新 stable</td></tr></tbody></table><p>Android 原生建置另需 JDK、Android SDK(見 <a href="/domains/android-capacitor.html">Android & Capacitor</a>)。</p><h2 id="_02-·-專案結構" tabindex="-1">02 · 專案結構 <a class="header-anchor" href="#_02-·-專案結構" aria-label="Permalink to "02 · 專案結構""></a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>StrawMoneyBook/</span></span>
<span class="line"><span>├── frontend/ # Vue 3 + Vite + Capacitor、Pinia、本機 SQLite</span></span>
<span class="line"><span>│ ├── src/ui/ # 畫面、元件、stores</span></span>
<span class="line"><span>│ ├── src/core/ # 與 UI 解耦的 services / utils</span></span>
<span class="line"><span>│ └── android/ # Capacitor Android 專案(銀行 WebView 原生碼)</span></span>
<span class="line"><span>├── backend/ # 共同帳本、帳號、OAuth exchange API</span></span>
<span class="line"><span>├── docs/ # 主 repo 內部文件與 docs/wiki 快照</span></span>
<span class="line"><span>├── docs/wiki/ # 與本 Wiki Operations 同步來源</span></span>
<span class="line"><span>└── scripts/ # 根目錄版本/檢查腳本</span></span></code></pre></div><p>程式入口:</p><table tabindex="0"><thead><tr><th>區塊</th><th>路徑</th></tr></thead><tbody><tr><td>前端 bootstrap</td><td><code>frontend/src/main.js</code></td></tr><tr><td>路由表</td><td><code>frontend/src/ui/router/index.js</code></td></tr><tr><td>後端 server</td><td><code>backend/src/server.js</code></td></tr></tbody></table><h2 id="_03-·-安裝" tabindex="-1">03 · 安裝 <a class="header-anchor" href="#_03-·-安裝" aria-label="Permalink to "03 · 安裝""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/StrawCoding/StrawMoneyBook.git</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> StrawMoneyBook</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --prefix</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> frontend</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --prefix</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> backend</span></span></code></pre></div><h2 id="_04-·-環境變數-首次必做" tabindex="-1">04 · 環境變數(首次必做) <a class="header-anchor" href="#_04-·-環境變數-首次必做" aria-label="Permalink to "04 · 環境變數(首次必做)""></a></h2><ol><li>複製範本:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> frontend/.env.example</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> frontend/.env.development.local</span></span></code></pre></div><ol start="2"><li>編輯 <code>frontend/.env.development.local</code>,至少設定:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">VITE_GOOGLE_WEB_CLIENT_ID</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">你的_Google_OAuth_Web_Client_ID</span></span></code></pre></div><ol start="3"><li>其餘變數說明見 <a href="/operations/environment-variables.html">Environment Variables</a>。</li><li><strong>勿</strong> commit <code>.env*</code>、keystore、Play SA JSON。</li></ol><h2 id="_05-·-啟動前端-預設連正式-api" tabindex="-1">05 · 啟動前端(預設連正式 API) <a class="header-anchor" href="#_05-·-啟動前端-預設連正式-api" aria-label="Permalink to "05 · 啟動前端(預設連正式 API)""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev:frontend</span></span></code></pre></div><ul><li>Vite dev server 啟動後依終端 URL 開瀏覽器(port 可能為 3000/5173 等,以輸出為準)。</li><li>此模式 <strong>不需要</strong> 本機 backend,API 指向 <code>https://api.strawmb.com</code>。</li></ul><h2 id="_06-·-可選-本機-backend" tabindex="-1">06 · 可選:本機 backend <a class="header-anchor" href="#_06-·-可選-本機-backend" aria-label="Permalink to "06 · 可選:本機 backend""></a></h2><p>若要 debug 共同帳本 API:</p><ol><li>在 <code>frontend/.env.development.local</code> 增加/覆寫:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">VITE_SHARED_LEDGER_API_BASE_URL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">http://127.0.0.1:8787</span></span></code></pre></div><ol start="2"><li>另開 terminal:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> dev:backend</span></span></code></pre></div><ol start="3"><li>後端 env 範本:<code>backend/.env.example</code>(複製為 <code>backend/.env</code>)。</li></ol><h2 id="_07-·-驗證" tabindex="-1">07 · 驗證 <a class="header-anchor" href="#_07-·-驗證" aria-label="Permalink to "07 · 驗證""></a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test:frontend</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test:backend</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check</span></span></code></pre></div><p>改動 UI 元件時,維護者另跑 <a href="/operations/playwright-app-shell.html">Playwright App Shell</a> 腳本(見 Operations)。</p><h2 id="_08-·-常見問題" tabindex="-1">08 · 常見問題 <a class="header-anchor" href="#_08-·-常見問題" aria-label="Permalink to "08 · 常見問題""></a></h2><table tabindex="0"><thead><tr><th>現象</th><th>方向</th></tr></thead><tbody><tr><td>Google 登入失敗</td><td>檢查 <code>VITE_GOOGLE_WEB_CLIENT_ID</code>、OAuth 同意畫面與 <a href="/guide/authentication.html">Authentication</a></td></tr><tr><td>無法連 API</td><td>確認是否誤設 <code>127.0.0.1:8787</code> 但 backend 未啟動</td></tr><tr><td><code>npm run check</code> 失敗</td><td>讀 CI 等價腳本輸出;i18n audit 缺 key 需補 messages</td></tr><tr><td>銀行同步在瀏覽器無效</td><td>銀行自動化為 <strong>Android 原生</strong>;見 <a href="/domains/bank-sync-einvoice.html">Bank Sync</a></td></tr></tbody></table><p>更多:<a href="/operations/troubleshooting.html">Troubleshooting</a>。</p><h2 id="下一步" tabindex="-1">下一步 <a class="header-anchor" href="#下一步" aria-label="Permalink to "下一步""></a></h2><ol><li><a href="/guide/">文件中心</a> — 全站模組地圖(推薦)</li><li><a href="/architecture/overview.html">Architecture Overview</a> — 本機優先與雲端邊界</li><li><a href="/architecture/application-layers.html">Application Layers</a> — <code>ui/</code> vs <code>core/</code></li><li><a href="/operations/open-source-and-license.html">Open Source & License</a> — fork 與商用邊界</li><li><a href="/operations/">Operations Home</a> — 發版、部署 runbook</li></ol></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><!----><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2026-10-28T06:27:00.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/guide/" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Documentation Hub</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/operations/open-source-and-license.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Open Source & License</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5d98c3a5 data-v-e315a0ad><div class="container" data-v-e315a0ad><p class="message" data-v-e315a0ad>StrawMoneyBook Developer Guide</p><p class="copyright" data-v-e315a0ad>Copyright © StrawCoding</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"architecture_application-layers.md\":\"CgR9XOHm\",\"architecture_ledger-lifecycle.md\":\"CcxXX2H7\",\"architecture_overview.md\":\"SAWkUI6W\",\"architecture_startup-and-runtime.md\":\"BP5clRCr\",\"domains_analysis-reports.md\":\"CBRDQ9qw\",\"domains_android-capacitor.md\":\"BtueDs6D\",\"domains_assets.md\":\"BHI_y_uT\",\"domains_bank-sync-einvoice.md\":\"DCM56cVG\",\"domains_bookkeeping.md\":\"Dcz1EQE6\",\"domains_budget.md\":\"B6BwF5sI\",\"domains_loans-reimbursements-claims.md\":\"CGlYGXaD\",\"domains_membership.md\":\"hRWI73Mi\",\"domains_sync-backup-shared-ledger.md\":\"BUR5g-Ks\",\"guide_authentication.md\":\"DO88H_Ar\",\"guide_backend-api.md\":\"0L67ETXg\",\"guide_data-model-and-storage.md\":\"CI5IWLP_\",\"guide_frontend-stack.md\":\"CzT-2QQa\",\"guide_index.md\":\"DpjXW36b\",\"index.md\":\"C8FStsUX\",\"operations_android-native-bank-apk.md\":\"DrWW5ClT\",\"operations_android-release-and-play-upload.md\":\"Btu0fZq-\",\"operations_auth-and-security-operations.md\":\"BHg2xi2-\",\"operations_backend-deployment-and-health.md\":\"C0ERdtKo\",\"operations_backups-and-restore.md\":\"BrLc53Sf\",\"operations_ci-cd-and-gates.md\":\"B750kS12\",\"operations_closeout-and-versioning.md\":\"BSt107ZE\",\"operations_environment-variables.md\":\"B9ovsejy\",\"operations_index.md\":\"D39Mkmqo\",\"operations_local-dev-quickstart.md\":\"CsEDR39_\",\"operations_long-task-worker.md\":\"BNfha-Vv\",\"operations_open-source-and-license.md\":\"U2XWYzu0\",\"operations_optimization-plan.md\":\"CT7Gn7DO\",\"operations_payroll-cycle-budget.md\":\"Dc826Ik7\",\"operations_playwright-app-shell.md\":\"CVjT92yw\",\"operations_release-process.md\":\"CmcTiGZr\",\"operations_sync-architecture-b.md\":\"MEm_kSO6\",\"operations_sync-operations-runbooks.md\":\"BSuYnVLl\",\"operations_technical-optimization.md\":\"CeeDfOcY\",\"operations_testing-and-verification.md\":\"CNgVwRe2\",\"operations_troubleshooting.md\":\"CcMQ51U_\",\"operations_wear-companion.md\":\"DXXXiXzc\",\"quick-start.md\":\"CH2Xo4Oj\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"zh-Hant\",\"dir\":\"ltr\",\"title\":\"StrawMoneyBook\",\"titleTemplate\":\":title | Developer Guide\",\"description\":\"StrawMoneyBook 官方開發者技術文件:架構、模組協作與功能域指南\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Guide\",\"link\":\"/guide/\"},{\"text\":\"Architecture\",\"link\":\"/architecture/overview\"},{\"text\":\"Domains\",\"link\":\"/domains/bookkeeping\"},{\"text\":\"Operations\",\"link\":\"/operations/\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/StrawCoding/StrawMoneyBook\"}],\"sidebar\":[{\"text\":\"Introduction\",\"items\":[{\"text\":\"What is StrawMoneyBook?\",\"link\":\"/\"},{\"text\":\"Documentation Hub\",\"link\":\"/guide/\"},{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Open Source & License\",\"link\":\"/operations/open-source-and-license\"}]},{\"text\":\"Architecture\",\"items\":[{\"text\":\"Overview\",\"link\":\"/architecture/overview\"},{\"text\":\"Application Layers\",\"link\":\"/architecture/application-layers\"},{\"text\":\"Startup & Runtime\",\"link\":\"/architecture/startup-and-runtime\"},{\"text\":\"Ledger Lifecycle\",\"link\":\"/architecture/ledger-lifecycle\"}]},{\"text\":\"Core Guide\",\"items\":[{\"text\":\"Data Model & Storage\",\"link\":\"/guide/data-model-and-storage\"},{\"text\":\"Frontend Stack\",\"link\":\"/guide/frontend-stack\"},{\"text\":\"Backend API\",\"link\":\"/guide/backend-api\"},{\"text\":\"Authentication\",\"link\":\"/guide/authentication\"}]},{\"text\":\"Feature Domains\",\"items\":[{\"text\":\"Bookkeeping\",\"link\":\"/domains/bookkeeping\"},{\"text\":\"Budget\",\"link\":\"/domains/budget\"},{\"text\":\"Assets\",\"link\":\"/domains/assets\"},{\"text\":\"Loans, Reimbursements & Claims\",\"link\":\"/domains/loans-reimbursements-claims\"},{\"text\":\"Analysis & Reports\",\"link\":\"/domains/analysis-reports\"},{\"text\":\"Sync, Backup & Shared Ledger\",\"link\":\"/domains/sync-backup-shared-ledger\"},{\"text\":\"Membership\",\"link\":\"/domains/membership\"},{\"text\":\"Bank Sync & E-Invoice\",\"link\":\"/domains/bank-sync-einvoice\"},{\"text\":\"Android & Capacitor\",\"link\":\"/domains/android-capacitor\"}]},{\"text\":\"Operations\",\"items\":[{\"text\":\"Home\",\"link\":\"/operations/\"},{\"text\":\"Open Source & License\",\"link\":\"/operations/open-source-and-license\"},{\"text\":\"Optimization Plan\",\"link\":\"/operations/optimization-plan\"},{\"text\":\"Local Dev\",\"link\":\"/operations/local-dev-quickstart\"},{\"text\":\"Environment Variables\",\"link\":\"/operations/environment-variables\"},{\"text\":\"Closeout & Versioning\",\"link\":\"/operations/closeout-and-versioning\"},{\"text\":\"Long-Task Worker\",\"link\":\"/operations/long-task-worker\"},{\"text\":\"Playwright App Shell\",\"link\":\"/operations/playwright-app-shell\"},{\"text\":\"Testing\",\"link\":\"/operations/testing-and-verification\"},{\"text\":\"CI / CD Gates\",\"link\":\"/operations/ci-cd-and-gates\"},{\"text\":\"Release Process\",\"link\":\"/operations/release-process\"},{\"text\":\"Android Play Upload\",\"link\":\"/operations/android-release-and-play-upload\"},{\"text\":\"Native Bank APK\",\"link\":\"/operations/android-native-bank-apk\"},{\"text\":\"Payroll Cycle Budget\",\"link\":\"/operations/payroll-cycle-budget\"},{\"text\":\"Wear Companion\",\"link\":\"/operations/wear-companion\"},{\"text\":\"Sync Architecture B\",\"link\":\"/operations/sync-architecture-b\"},{\"text\":\"Sync Runbooks\",\"link\":\"/operations/sync-operations-runbooks\"},{\"text\":\"Backend Deploy\",\"link\":\"/operations/backend-deployment-and-health\"},{\"text\":\"Backups & Restore\",\"link\":\"/operations/backups-and-restore\"},{\"text\":\"Auth & Security\",\"link\":\"/operations/auth-and-security-operations\"},{\"text\":\"Troubleshooting\",\"link\":\"/operations/troubleshooting\"},{\"text\":\"Technical Optimization\",\"link\":\"/operations/technical-optimization\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/StrawCoding/StrawMoneyBookWiki\"}],\"footer\":{\"message\":\"StrawMoneyBook Developer Guide\",\"copyright\":\"Copyright © StrawCoding\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>