sattle: Quasar PWA scaffold with lnurlcash-kit protocol core

M1: Quasar 2 / Vue 3 / TS / Pinia / i18n / PWA app shell in the lnurl-wallet
palette (#002222/#004444/#55ffcc, Noto Sans). Protocol layer is the external
lnurlcash-kit library (git dependency on the fork until upstream merges the
prepare fix / publishes to npm); keys.ts + receive.ts vendored from
lnurl-wallet with the derivation domain renamed to 'sattle'. Nix dev shell,
ci workflow (typecheck, vitest, pwa build).
This commit is contained in:
2026-08-19 13:29:34 +02:00
commit 54d6112414
60 changed files with 14447 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
{
"orientation": "portrait",
"background_color": "#002222",
"theme_color": "#002222",
"id": "sattle",
"display_override": ["fullscreen", "minimal-ui"],
"display": "standalone",
"icons": [
{
"src": "icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icons/icon-256x256.png",
"sizes": "256x256",
"type": "image/png"
},
{
"src": "icons/icon-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
+5335
View File
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
{
"name": "quasar-pwa-app",
"version": "1.0.0",
"description": "Quasar PWA Folder",
"private": true,
"type": "module",
"dependencies": {
"register-service-worker": "^1.7.2"
},
"devDependencies": {
"workbox-build": "^7.0.0",
"workbox-cacheable-response": "^7.0.0",
"workbox-core": "^7.0.0",
"workbox-expiration": "^7.0.0",
"workbox-precaching": "^7.0.0",
"workbox-routing": "^7.0.0",
"workbox-strategies": "^7.0.0"
}
}
+41
View File
@@ -0,0 +1,41 @@
import { register } from "register-service-worker";
// The ready(), registered(), cached(), updatefound() and updated()
// events passes a ServiceWorkerRegistration instance in their arguments.
// ServiceWorkerRegistration: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
register(import.meta.env.QUASAR_SERVICE_WORKER_FILE, {
// The registrationOptions object will be passed as the second argument
// to ServiceWorkerContainer.register()
// https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#Parameter
// registrationOptions: { scope: './' },
ready(/* registration */) {
// console.log('Service worker is active.')
},
registered(/* registration */) {
// console.log('Service worker has been registered.')
},
cached(/* registration */) {
// console.log('Content has been cached for offline use.')
},
updatefound(/* registration */) {
// console.log('New content is downloading.')
},
updated(/* registration */) {
// console.log('New content is available; please refresh.')
},
offline() {
// console.log('No internet connection found. App is running in offline mode.')
},
error(/* err */) {
// console.error('Error during service worker registration:', err)
}
});
+39
View File
@@ -0,0 +1,39 @@
/*
* This file (which will be your service worker)
* is picked up by the build system ONLY if
* quasar.config file > pwa > workboxMode is set to "InjectManifest"
*/
import { clientsClaim } from "workbox-core";
import { NavigationRoute, registerRoute } from "workbox-routing";
import {
cleanupOutdatedCaches,
createHandlerBoundToURL,
precacheAndRoute
} from "workbox-precaching";
declare const self: ServiceWorkerGlobalScope & typeof globalThis;
void self.skipWaiting();
clientsClaim();
// Use with precache injection
precacheAndRoute(self.__WB_MANIFEST);
cleanupOutdatedCaches();
if (import.meta.env.QUASAR_PROD) {
// Non-SSR/SSG fallbacks to index.html
// Production SSR/SSG fallbacks to offline.html (except for dev)
registerRoute(
new NavigationRoute(
createHandlerBoundToURL(import.meta.env.QUASAR_PWA_FALLBACK_HTML),
{
denylist: [
new RegExp(import.meta.env.QUASAR_PWA_SERVICE_WORKER_REGEX),
/workbox-(.)*\.js$/
]
}
)
);
}
+3
View File
@@ -0,0 +1,3 @@
{
"extends": "../../.quasar/tsconfig.pwa-sw.json"
}