PageSourceSearch

https://docs-zaptracker.netlify.app/developers/

html docs-zaptracker.netlify.app collected 2026-10-03 10:39:37 UTC 41,530 bytes, 63 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US" dir="ltr">
3  <head>
4    <meta charset="utf-8">
5<!-- This site is hosted on Netlify. Anyone can build and deploy a site
6     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=f84b8706-cd2b-4403-affc-11f7ba38452e
7     Netlify hosting facts for this site: static/SSR served via Netlify Edge. -->
8    <meta name="viewport" content="width=device-width,initial-scale=1">
9    <title>Developer Overview | ZapTracker</title>
10    <meta name="description" content="All-in-One Dashboard for Bitcoin Lightning & Nostr">
11    <meta name="generator" content="VitePress v1.6.4">
12    <link rel="preload stylesheet" href="/assets/style.Dzx_kauk.css" as="style">
13    <link rel="preload stylesheet" href="/vp-icons.css" as="style">
14    
15    
15<script type="module" src="/assets/app.H3XTq9uu.js"></script>
15
16    <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
17    <link rel="modulepreload" href="/assets/chunks/theme.C3ZSlc_V.js">
18    <link rel="modulepreload" href="/assets/chunks/framework.DWdSXOaE.js">
19    <link rel="modulepreload" href="/assets/developers_index.md.Dp8HciIX.lean.js">
20    <link rel="icon" href="/favicon.ico">
21    <link rel="preconnect" href="https://fonts.googleapis.com">
22    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
23    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap" rel="stylesheet">
24    <meta name="theme-color" content="#f97316">
25    <meta property="og:title" content="ZapTracker Documentation">
26    <meta property="og:description" content="All-in-One Dashboard for Bitcoin Lightning &amp; Nostr">
27    <meta property="og:type" content="website">
28    
28<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>
28
29    
29<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
29
30  </head>
31  <body>
32    <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><!--[--><!--]--><!--[--><img class="VPImage logo" src="/images/ZapTracker_logo.png" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>ZapTracker</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="/use-cases/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Use Cases</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/developers/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Developers</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-dc692963 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><!----><span data-v-cf11d7a2>Links</span><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><div class="items" data-v-b98bc113><!--[--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://zap-tracker.netlify.app" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>ZapTracker App</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://github.com/pratik227/zap_dashboard" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>GitHub</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://geyser.fund/project/zaptracker?hero=drshift" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>Support Us</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></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/pratik227/zap_dashboard" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a>
32<!--]--></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/pratik227/zap_dashboard" 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>Back 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>Developer Guide</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/developers/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/developers/structure" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Project Structure</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" 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>Technical Reference</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/developers/components" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Components</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/developers/composables" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Composables</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/developers/nip-07" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>NIP-07 Integration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/developers/nwc" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>NWC Integration</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible" 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>Contributing</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/contributing/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Getting Started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/contributing/setup" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Development Setup</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/contributing/guidelines" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Code Guidelines</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/contributing/pull-requests" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Pull Requests</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 _developers_" data-v-39a288b8><div>
32<h1 id="developer-overview" tabindex="-1">Developer Overview <a class="header-anchor" href="#developer-overview" aria-label="Permalink to &quot;Developer Overview&quot;">​</a></h1><div class="page-intro" data-v-04671e2d><div class="page-intro__icon" data-v-04671e2d><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-04671e2d></svg></div><div class="page-intro__content" data-v-04671e2d><!--[--><p>Technical documentation for ZapTracker developers.</p><p>Learn how ZapTracker is built and how to contribute to the project.</p><!--]--></div></div><h2 id="technology-stack" tabindex="-1">Technology Stack <a class="header-anchor" href="#technology-stack" aria-label="Permalink to &quot;Technology Stack&quot;">​</a></h2><div class="tech-stack" data-v-e70c73db><h4 class="tech-stack__title" data-v-e70c73db>Frontend Framework</h4><div class="tech-stack__grid" data-v-e70c73db><!--[--><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>Vue.js <span class="tech-item__version" data-v-e70c73db>3.4</span></span><span class="tech-item__description" data-v-e70c73db>Composition API</span></div></div><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>Vite <span class="tech-item__version" data-v-e70c73db>5</span></span><span class="tech-item__description" data-v-e70c73db>Build tool</span></div></div><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>Tailwind CSS <span class="tech-item__version" data-v-e70c73db>3</span></span><span class="tech-item__description" data-v-e70c73db>Styling</span></div></div><!--]--></div></div><div class="tech-stack" data-v-e70c73db><h4 class="tech-stack__title" data-v-e70c73db>Nostr &amp; Bitcoin</h4><div class="tech-stack__grid" data-v-e70c73db><!--[--><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>nostr-tools <!----></span><span class="tech-item__description" data-v-e70c73db>Nostr protocol implementation</span></div></div><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>@getalby/bitcoin-connect <!----></span><span class="tech-item__description" data-v-e70c73db>Wallet connection</span></div></div><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>@getalby/sdk <!----></span><span class="tech-item__description" data-v-e70c73db>Alby integration</span></div></div><!--]--></div></div><div class="tech-stack" data-v-e70c73db><h4 class="tech-stack__title" data-v-e70c73db>UI &amp; Visualization</h4><div class="tech-stack__grid" data-v-e70c73db><!--[--><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>ECharts <!----></span><span class="tech-item__description" data-v-e70c73db>Charts and visualizations</span></div></div><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>Lucide Vue <!----></span><span class="tech-item__description" data-v-e70c73db>Icons</span></div></div><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>FullCalendar <!----></span><span class="tech-item__description" data-v-e70c73db>Calendar component</span></div></div><!--]--></div></div><div class="tech-stack" data-v-e70c73db><h4 class="tech-stack__title" data-v-e70c73db>PWA</h4><div class="tech-stack__grid" data-v-e70c73db><!--[--><div class="tech-item" data-v-e70c73db><div class="tech-item__icon" data-v-e70c73db><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e70c73db></svg></div><div class="tech-item__content" data-v-e70c73db><span class="tech-item__name" data-v-e70c73db>
32vite-plugin-pwa <!----></span><span class="tech-item__description" data-v-e70c73db>Progressive Web App support</span></div></div><!--]--></div></div><h2 id="architecture-overview" tabindex="-1">Architecture Overview <a class="header-anchor" href="#architecture-overview" aria-label="Permalink to &quot;Architecture Overview&quot;">​</a></h2><p>ZapTracker is a client-side Vue 3 application that connects directly to Nostr relays and Lightning wallets.</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>┌─────────────────────────────────────────────────┐</span></span>
33<span class="line"><span>│                   Browser                        │</span></span>
34<span class="line"><span>│  ┌─────────────────────────────────────────┐   │</span></span>
35<span class="line"><span>│  │            ZapTracker App                │   │</span></span>
36<span class="line"><span>│  │  ┌─────────┐  ┌────────┐  ┌─────────┐  │   │</span></span>
37<span class="line"><span>│  │  │  Pages  │  │Compos- │  │  Utils  │  │   │</span></span>
38<span class="line"><span>│  │  │         │  │ables   │  │         │  │   │</span></span>
39<span class="line"><span>│  │  └────┬────┘  └───┬────┘  └────┬────┘  │   │</span></span>
40<span class="line"><span>│  │       │           │            │        │   │</span></span>
41<span class="line"><span>│  │       └───────────┼────────────┘        │   │</span></span>
42<span class="line"><span>│  │                   │                      │   │</span></span>
43<span class="line"><span>│  │           ┌───────┴───────┐              │   │</span></span>
44<span class="line"><span>│  │           │ Local Storage │              │   │</span></span>
45<span class="line"><span>│  │           └───────────────┘              │   │</span></span>
46<span class="line"><span>│  └─────────────────────────────────────────┘   │</span></span>
47<span class="line"><span>│                      │                          │</span></span>
48<span class="line"><span>│  ┌───────────────────┼───────────────────┐     │</span></span>
49<span class="line"><span>│  │     NIP-07        │       NWC         │     │</span></span>
50<span class="line"><span>│  │   Extension       │     Protocol      │     │</span></span>
51<span class="line"><span>│  └───────────────────┼───────────────────┘     │</span></span>
52<span class="line"><span>└──────────────────────┼──────────────────────────┘</span></span>
53<span class="line"><span>                       │</span></span>
54<span class="line"><span>        ┌──────────────┼──────────────┐</span></span>
55<span class="line"><span>        ▼              ▼              ▼</span></span>
56<span class="line"><span>   ┌─────────┐   ┌─────────┐   ┌─────────┐</span></span>
57<span class="line"><span>   │  Nostr  │   │  Nostr  │   │Lightning│</span></span>
58<span class="line"><span>   │  Relay  │   │  Relay  │   │ Wallet  │</span></span>
59<span class="line"><span>   └─────────┘   └─────────┘   └─────────┘</span></span></code></pre></div><h2 id="key-concepts" tabindex="-1">Key Concepts <a class="header-anchor" href="#key-concepts" aria-label="Permalink to &quot;Key Concepts&quot;">​</a></h2><div class="info-box info-box--default" data-v-e0f1f87b><div class="info-box__header" data-v-e0f1f87b><div class="info-box__icon" data-v-e0f1f87b><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e0f1f87b></svg></div><h4 class="info-box__title" data-v-e0f1f87b>No Backend</h4></div><div class="info-box__content" data-v-e0f1f87b><!--[--><p>ZapTracker has no server component:</p><ul><li>All data in browser localStorage</li><li>Direct connection to Nostr relays</li><li>NWC for wallet communication</li></ul><!--]--></div></div><div class="info-box info-box--success" data-v-e0f1f87b><div class="info-box__header" data-v-e0f1f87b><div class="info-box__icon" data-v-e0f1f87b><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e0f1f87b></svg></div><h4 class="info-box__title" data-v-e0f1f87b>Privacy First</h4></div><div class="info-box__content" data-v-e0f1f87b><!--[--><p>User data never leaves the browser:</p><ul><li>Profile data from Nostr</li><li>Preferences in localStorage</li><li>No analytics or tracking</li></ul><!--]--></div></div><div class="info-box info-box--default" data-v-e0f1f87b><div class="info-box__header" data-v-e0f1f87b><div class="info-box__icon" data-v-e0f1f87b><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-e0f1f87b></svg></div><h4 class="info-box__title" data-v-e0f1f87b>Real-Time Updates</h4></div><div class="info-box__content" data-v-e0f1f87b><!--[--><p>Live data through:</p><ul><li>WebSocket connections to relays</li><li>NWC event subscriptions</li><li>Reactive Vue state</li></ul><!--]--></div></div><h2 id="documentation-sections" tabindex="-1">Documentation Sections <a class="header-anchor" href="#documentation-sections" aria-label="Permalink to &quot;Documentation Sections&quot;">​</a></h2><div class="link-cards" data-v-55d26b48><!--[--><a href="/developers/structure" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>Codebase Structure</span><span class="link-card__description" data-v-55d26b48>Files and folders organization</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><a href="/developers/components" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>Components</span><span class="link-card__description" data-v-55d26b48>Vue component reference</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><a href="/developers/composables" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>Composables</span><span class="link-card__description" data-v-55d26b48>Composition functions</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><a href="/developers/nip-07" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>NIP-07</span><span class="link-card__description" data-v-55d26b48>Browser extension integration</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><a href="/developers/nwc" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>Nostr Wallet Connect</span><span class="link-card__description" data-v-55d26b48>Lightning wallet protocol</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a>
59<!--]--></div><h2 id="quick-links" tabindex="-1">Quick Links <a class="header-anchor" href="#quick-links" aria-label="Permalink to &quot;Quick Links&quot;">​</a></h2><div class="link-cards" data-v-55d26b48><!--[--><a href="https://github.com/pratik227/zap_dashboard" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>GitHub Repository</span><span class="link-card__description" data-v-55d26b48>Source code</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><a href="/contributing/" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>Contributing Guide</span><span class="link-card__description" data-v-55d26b48>
59How to contribute</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><a href="/contributing/setup" class="link-card" data-v-55d26b48><div class="link-card__icon" data-v-55d26b48><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" data-v-55d26b48></svg></div><div class="link-card__content" data-v-55d26b48><span class="link-card__title" data-v-55d26b48>Development Setup</span><span class="link-card__description" data-v-55d26b48>Get started locally</span></div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1em" height="1em" viewBox="0 0 16 16" class="link-card__arrow" data-v-55d26b48></svg></a><!--]--></div></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/pratik227/zap_dashboard/edit/main/docs/developers/index.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page on GitHub<!--]--></a></div><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2026-01-05T22:20:43.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><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/developers/structure" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next</span><span class="title" data-v-e257564d>Project Structure</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>Built with Lightning by <a href="https://github.com/pratik227" target="_blank">Pratik</a> & <a href="https://github.com/DoktorShift" target="_blank">DoktorShift</a></p><p class="copyright" data-v-e315a0ad>MIT License <span class="footer-separator">·</span> <a href="https://github.com/pratik227/zap_dashboard" target="_blank">Source Code</a></p></div></footer><!--[--><!--]--></div></div>
60    
60<script>window.__VP_HASH_MAP__=JSON.parse("{\"contributing_guidelines.md\":\"DrHxJZdw\",\"contributing_index.md\":\"D55p78EQ\",\"contributing_pull-requests.md\":\"Cuy9Ii8f\",\"contributing_setup.md\":\"DQ2BHROx\",\"developers_components.md\":\"5Bje9WSP\",\"developers_composables.md\":\"Nw6djjPk\",\"developers_index.md\":\"Dp8HciIX\",\"developers_nip-07.md\":\"D1NyalMy\",\"developers_nwc.md\":\"CilYnf7q\",\"developers_structure.md\":\"CNEBMVP8\",\"guide_analytics.md\":\"BCNB0xr7\",\"guide_audience.md\":\"zl8TwgpA\",\"guide_campaigns.md\":\"D9qlzNUh\",\"guide_content.md\":\"DpIoNVzM\",\"guide_dashboard.md\":\"BuBaQ1yQ\",\"guide_getting-started.md\":\"BcBzPHFq\",\"guide_index.md\":\"CND3WqNy\",\"guide_tips.md\":\"DJofYUTx\",\"guide_troubleshooting.md\":\"CdtwDaNE\",\"guide_wallet.md\":\"DHp1f17a\",\"index.md\":\"DFjyUMl6\",\"use-cases_community-builders.md\":\"Bp8CNvUs\",\"use-cases_content-creators.md\":\"BjmDmSN7\",\"use-cases_developers.md\":\"DHNro9tO\",\"use-cases_educators.md\":\"D4exeRBI\",\"use-cases_event-organizers.md\":\"CNCyR_ek\",\"use-cases_index.md\":\"DfNRmzrf\",\"use-cases_merchants.md\":\"B24iqXZl\",\"use-cases_podcasters.md\":\"C-OID1qG\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"ZapTracker\",\"description\":\"All-in-One Dashboard for Bitcoin Lightning & Nostr\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/images/ZapTracker_logo.png\",\"siteTitle\":\"ZapTracker\",\"nav\":[{\"text\":\"Guide\",\"link\":\"/guide/\"},{\"text\":\"Use Cases\",\"link\":\"/use-cases/\"},{\"text\":\"Developers\",\"link\":\"/developers/\"},{\"text\":\"Links\",\"items\":[{\"text\":\"ZapTracker App\",\"link\":\"https://zap-tracker.netlify.app\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/pratik227/zap_dashboard\"},{\"text\":\"Support Us\",\"link\":\"https://geyser.fund/project/zaptracker?hero=drshift\"}]}],\"sidebar\":{\"/guide/\":[{\"text\":\"Introduction\",\"items\":[{\"text\":\"What is ZapTracker?\",\"link\":\"/guide/\"},{\"text\":\"Getting Started\",\"link\":\"/guide/getting-started\"}]},{\"text\":\"Core Features\",\"collapsed\":false,\"items\":[{\"text\":\"Dashboard\",\"link\":\"/guide/dashboard\"},{\"text\":\"Wallet\",\"link\":\"/guide/wallet\"},{\"text\":\"Content\",\"link\":\"/guide/content\"},{\"text\":\"Audience\",\"link\":\"/guide/audience\"},{\"text\":\"Campaigns\",\"link\":\"/guide/campaigns\"},{\"text\":\"Analytics\",\"link\":\"/guide/analytics\"}]},{\"text\":\"Resources\",\"collapsed\":false,\"items\":[{\"text\":\"Tips & Best Practices\",\"link\":\"/guide/tips\"},{\"text\":\"Troubleshooting\",\"link\":\"/guide/troubleshooting\"}]}],\"/use-cases/\":[{\"text\":\"Use Cases\",\"items\":[{\"text\":\"Overview\",\"link\":\"/use-cases/\"}]},{\"text\":\"By Role\",\"collapsed\":false,\"items\":[{\"text\":\"Content Creators\",\"link\":\"/use-cases/content-creators\"},{\"text\":\"Podcasters\",\"link\":\"/use-cases/podcasters\"},{\"text\":\"Community Builders\",\"link\":\"/use-cases/community-builders\"},{\"text\":\"Merchants\",\"link\":\"/use-cases/merchants\"},{\"text\":\"Event Organizers\",\"link\":\"/use-cases/event-organizers\"},{\"text\":\"Educators\",\"link\":\"/use-cases/educators\"},{\"text\":\"Open Source Developers\",\"link\":\"/use-cases/developers\"}]}],\"/developers/\":[{\"text\":\"Developer Guide\",\"items\":[{\"text\":\"Overview\",\"link\":\"/developers/\"},{\"text\":\"Project Structure\",\"link\":\"/developers/structure\"}]},{\"text\":\"Technical Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Components\",\"link\":\"/developers/components\"},{\"text\":\"Composables\",\"link\":\"/developers/composables\"},{\"text\":\"NIP-07 Integration\",\"link\":\"/developers/nip-07\"},{\"text\":\"NWC Integration\",\"link\":\"/developers/nwc\"}]},{\"text\":\"Contributing\",\"collapsed\":false,\"items\":[{\"text\":\"Getting Started\",\"link\":\"/contributing/\"},{\"text\":\"Development Setup\",\"link\":\"/contributing/setup\"},{\"text\":\"Code Guidelines\",\"link\":\"/contributing/guidelines\"},{\"text\":\"Pull Requests\",\"link\":\"/contributing/pull-requests\"}]}
60],\"/contributing/\":[{\"text\":\"Contributing\",\"items\":[{\"text\":\"Getting Started\",\"link\":\"/contributing/\"},{\"text\":\"Development Setup\",\"link\":\"/contributing/setup\"},{\"text\":\"Code Guidelines\",\"link\":\"/contributing/guidelines\"},{\"text\":\"Pull Requests\",\"link\":\"/contributing/pull-requests\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/pratik227/zap_dashboard\"}],\"footer\":{\"message\":\"Built with Lightning by <a href=\\\"https://github.com/pratik227\\\" target=\\\"_blank\\\">Pratik</a> & <a href=\\\"https://github.com/DoktorShift\\\" target=\\\"_blank\\\">DoktorShift</a>\",\"copyright\":\"MIT License <span class=\\\"footer-separator\\\">·</span> <a href=\\\"https://github.com/pratik227/zap_dashboard\\\" target=\\\"_blank\\\">Source Code</a>\"},\"editLink\":{\"pattern\":\"https://github.com/pratik227/zap_dashboard/edit/main/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"search\":{\"provider\":\"local\",\"options\":{\"detailedView\":true}},\"outline\":{\"level\":[2,3],\"label\":\"On this page\"},\"docFooter\":{\"prev\":\"Previous\",\"next\":\"Next\"},\"returnToTopLabel\":\"Back to top\",\"sidebarMenuLabel\":\"Menu\",\"darkModeSwitchLabel\":\"Appearance\",\"lastUpdated\":{\"text\":\"Last updated\",\"formatOptions\":{\"dateStyle\":\"medium\"}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
60
61    
62  </body>
63</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.