Commit graph

16 commits

Author SHA1 Message Date
9a8d7b40f0 Add iOS install hint + Apple PWA meta tags
iOS Safari has no beforeinstallprompt API, so the portal's Install
button (?install=1) silently did nothing there. IosInstallHint now
shows Share -> Add to Home Screen steps on Safari, or a prompt to
switch to Safari first if opened in another iOS browser/in-app
webview (those can't install PWAs on iOS at all).

Also added apple-mobile-web-app-title + apple-touch-icon so the
home screen icon isn't a page screenshot.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 14:12:12 +00:00
b40f0d078c Scope PWA manifest to app's own path instead of origin root
Every installed PWA claimed scope "/", so Android link-capturing routed
navigation for any app on the shared origin into whichever PWA had it.
2026-07-29 13:47:10 +00:00
04f8c9f45c Add update-available banner via periodic health version check
Backend /health now returns a build version; frontend polls it every
2 minutes (and on tab focus) and shows a reload banner when it changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-28 22:08:23 +00:00
56da4c72b2 Fix PWA manifest scope to / per install-architecture doc
Scope was set to the app's own base path, which breaks the installed
PWA out of standalone mode into a regular browser tab on any
same-origin navigation outside that path (e.g. the auth redirect).
scope: "/" keeps navigation inside the installed app's window.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 17:06:47 +00:00
3b09089817 Sync shared components — sidebar scrollbar, Layout, AuthGate updates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 12:07:11 +00:00
0200775030 Add shared device inactivity timeout to AuthGate 2026-07-13 11:53:04 +00:00
c15bff37c9 Replace letter icons with Lucide PWA icons 2026-07-11 20:30:06 +00:00
e720d02186 Make noticeboard installable as a PWA
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-11 11:27:00 +00:00
71f7cf560e Proxy requireAuth to auth service /verify for live permission checks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 00:24:02 +00:00
24747919cd Apply stack design system: light theme + Lucide icons
- index.css: match portal token system (light body, dark login chrome)
- NoticeBoard: white cards/shadows, Lucide Pin/PinOff/Trash2/Plus/X icons,
  light input/button styles, category pills with navy active state
- AuthGate: explicit dark bg on login container (body is now light)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 18:15:53 +00:00
58b3d82b85 Fix API paths and make hotel name configurable
- /api/notices → /notices/api/notices to match nginx location block
  (was returning portal index.html causing JSON parse error)
- Add VITE_HOTEL_NAME build arg, remove hardcoded hotel name
- Add vite-env.d.ts for TypeScript import.meta.env support

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 17:55:36 +00:00
e170adee12 Healthcheck: 127.0.0.1 (avoid IPv6 localhost refused) 2026-07-01 14:42:30 +00:00
c40f720ae7 Fix TS6133: remove unused user prop from PostForm 2026-07-01 14:23:25 +00:00
11de77ea76 Docker-in-LXC: security_opt apparmor=unconfined (both services) 2026-07-01 13:28:53 +00:00
803c92ec63 offsite: use shared ip-check with 'auto' mode 2026-07-01 12:57:58 +00:00
d91e8ac96f Initial commit: noticeboard 2026-07-01 12:09:54 +00:00