833 Commits
Author SHA1 Message Date
zeekay dee0d76af8 fix: superuser token fallback in external-only auth mode + scrub PB references
- loadAuthToken now falls back to local validation for _superusers tokens
  when JWKS validation fails in external-only mode. Non-superuser local
  tokens are still rejected. Fixes seeding with IAM enabled.
- Scrub PocketBase references from docs, SDK, and UI config
2026-03-02 15:28:53 -07:00
zeekay 6e44ac3159 Add IAM OIDC login for Base admin -- all auth through IAM
Implements OIDC authorization code flow with PKCE for the superuser
login page (/_/). When BASE_OIDC_ISSUER is set, the email/password
form is hidden and replaced with a single "Sign in" button that
redirects through the OIDC flow. The callback stores the auth token
in localStorage and redirects to the admin UI.

Routes:
  GET /_/auth/oidc/redirect  - start OIDC flow (state+PKCE cookies)
  GET /_/auth/oidc/callback  - exchange code, find/create superuser
  GET /_/api/oidc/config     - reports whether OIDC is enabled

Env vars: BASE_OIDC_ISSUER, BASE_OIDC_CLIENT_ID,
BASE_OIDC_CLIENT_SECRET, BASE_OIDC_AUTO_CREATE_SUPERUSER
2026-03-02 15:01:53 -07:00
zeekay c91e8d0d5e Title uses APP_NAME only — 'Base' is fallback when no name set 2026-03-02 14:20:27 -07:00
zeekay 603f5c16e4 Remove hardcoded Hanzo Analytics and branding from admin UI 2026-03-02 14:17:21 -07:00
zeekay a28b3db6cc fix: vendor-neutral branding — remove all hardcoded "Hanzo Base"
Replace "Hanzo Base" fallbacks with generic "Base" in all Svelte UI
components. When $appName is set (e.g. "<tenant>"), it displays
that instead. Help text uses "the application" rather than a brand.

Files: App.svelte, FullPage.svelte, PageWrapper.svelte, index.html,
PageBackups, PageStorage, PageMail, TrustedProxyAccordion,
CollectionRulesTab, LarkOptions, PageExportCollections
2026-03-01 17:20:08 -07:00
zeekay fc36d43451 chore: migrate ui from npm to pnpm 2026-03-02 04:10:36 -07:00
zeekay 4712db18f2 fix(ui): rebrand admin dashboard — Base → Hanzo Base 2026-03-01 17:11:49 -07:00
zeekay a9231b85fe chore: update Go and UI dependencies
Go: goja, fatih/color, fsnotify, grpc, protobuf, sqlite, temporal, x/* libs
UI: npm update (3 packages)
2026-03-02 10:30:35 -07:00
zeekay 7c8b6bd5a4 fix(ui): resolve @hanzo/base/compat for Docker builds
The Vite alias 'base' -> '@hanzo/base/compat' failed in Docker because
the file:../sdk/base-js link can't resolve when only ui/ is copied into
the build context. Since @hanzo/base/compat is just a re-export of the
pocketbase package, alias 'base' directly to 'pocketbase' and add it as
a direct devDependency, removing the file: link.
2026-03-02 01:22:56 -07:00
zeekay 7da62dfb4f feat(sdk): publish @hanzo/base v0.2.0, swap UI dependency
- Add /compat export path re-exporting PocketBase client as drop-in
- Add pocketbase as dependency (compat layer)
- Add RealtimeService.unsubscribe() method
- Build: core, compat, react, crdt entry points
- UI: swap pocketbase → @hanzo/base/compat, builds clean
- Published to npm as @hanzo/[email protected]
2026-03-02 10:49:54 -07:00
zeekay 7448c6cea5 fix: add root redirect to /_/ admin UI 2026-03-02 01:43:39 -07:00
zeekay c3fa775af1 fix: black text on ALL filled buttons (primary, info, secondary, expanded) 2026-03-02 01:30:06 -07:00
zeekay 6d1d67d362 fix: nuclear CSS override — white bg black text on primary button, kill ::before 2026-03-02 01:23:29 -07:00
zeekay a134001cd6 fix: add primary to btn variations map — black text on white CTA 2026-03-02 01:12:52 -07:00
zeekay fff0bca4f4 fix: CSP allows Google Fonts + analytics, fresh remixicon font, black text on CTA 2026-03-02 00:56:03 -07:00
zeekay 93cd4cff10 fix: add global remixicon font-family rule for icon rendering 2026-03-02 00:37:07 -07:00
zeekay 3fe483ac1b refactor: remove _hz_ prefix from collection IDs, add brand-neutral logo config
Remove all _hz_ prefixes from collection IDs, internal markers, and test
fixtures. The default users collection is now _users_auth_ instead of
_hz_users_auth_. Internal SQL parser tokens renamed from __hz_join__/__hz_discard__
to __join__/__discard__. Backup prefix changed from @auto_hz_backup_ to
@auto_backup_. Test database updated with correct collection IDs and indexes.
JWT tokens in test files regenerated with new collection IDs.

Add LogoURL field to MetaConfig so the admin UI logo is configurable via
app settings instead of hardcoded. FullPage.svelte and App.svelte sidebar
now read logo and app name from the settings store, falling back to
defaults when not configured.
2026-03-01 23:48:36 -07:00
zeekay 4e8b046870 fix: dev pill button with animated auto-login, rename to 'Login as Superuser' 2026-03-01 22:41:07 -07:00
zeekay 51b91d4c9a fix: primary button class, dev fill credentials, remove broken icon, fix installer button 2026-03-01 22:35:53 -07:00
zeekay 8dd5b61fff fix: Geist fonts, font imports, monochrome buttons 2026-03-01 22:28:46 -07:00
zeekay 9b8fa2c1ea fix: monochrome black/white theme — #000 bg, white buttons, desaturated, matches hanzo.ai 2026-03-01 22:26:21 -07:00
zeekay 482cdc9280 fix: monochrome white logo, single 'Base' text, clean title 2026-03-01 22:06:44 -07:00
zeekay ee7255323b fix: replace remaining pb references with base in ApiClient.js 2026-03-01 21:59:17 -07:00
zeekay cf0252a28e Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	apis/record_auth_with_otp.go
#	core/base_backup.go
#	go.mod
#	go.sum
#	plugins/jsvm/internal/types/generated/types.d.ts
#	tools/router/rereadable_read_closer_test.go
#	ui/dist/assets/AuthMethodsDocs-C2aSYmNv.js
#	ui/dist/assets/AuthRefreshDocs-BapWJLRK.js
#	ui/dist/assets/AuthWithOAuth2Docs-Ck_pnbL8.js
#	ui/dist/assets/AuthWithOtpDocs-D8uWq_C5.js
#	ui/dist/assets/AuthWithPasswordDocs-BQyMhAeO.js
#	ui/dist/assets/BatchApiDocs-rvUuWLZE.js
#	ui/dist/assets/CodeEditor-DrMyw8z_.js
#	ui/dist/assets/CreateApiDocs-XWzcGuMB.js
#	ui/dist/assets/DeleteApiDocs-CScE0aw3.js
#	ui/dist/assets/EmailChangeDocs-CxOtrB4s.js
#	ui/dist/assets/FieldsQueryParam-BzNUQIb5.js
#	ui/dist/assets/FilterAutocompleteInput-Dm2G2coC.js
#	ui/dist/assets/Leaflet-DyumpnOc.js
#	ui/dist/assets/ListApiDocs-CdOzMZnr.js
#	ui/dist/assets/PageInstaller-vIXdffAJ.js
#	ui/dist/assets/PageOAuth2RedirectFailure-ClpyaW_B.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-BLZml1eK.js
#	ui/dist/assets/PageRecordConfirmEmailChange-Cm3O2YD1.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-D0XfuL45.js
#	ui/dist/assets/PageRecordConfirmVerification-CYyNYH_v.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-BvlQ0_9t.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-gUPMclJZ.js
#	ui/dist/assets/PasswordResetDocs-DMF1vqE0.js
#	ui/dist/assets/RealtimeApiDocs-CNVij_C2.js
#	ui/dist/assets/UpdateApiDocs-CwQ3ZhFQ.js
#	ui/dist/assets/VerificationDocs-DUeWWjrS.js
#	ui/dist/assets/ViewApiDocs-gocWxbTE.js
#	ui/dist/assets/index-CWGqJiyp.js
#	ui/dist/index.html
2026-03-01 19:27:21 -07:00
Gani Georgiev 7aed9585b8 updated npm deps and ui/dist 2026-03-02 18:52:51 +02:00
Gani Georgiev cb8b2f6301 updated ui/dist 2026-03-02 17:33:04 +02:00
Gani Georgiev 9feb83cdad applied lint typo fixes 2026-03-02 22:31:27 +02:00
zeekay 987ae1358d fix: rebrand UI with real Hanzo logo, title, favicons — zero PocketBase in HTML 2026-03-01 19:26:33 -07:00
zeekay 8c88b7225f fix: use --dash-* token vars (not --admin-*) 2026-03-02 14:42:50 -07:00
zeekay 0f8ab327c3 feat: adopt shared admin design tokens from @hanzo/ui
Import _hanzo-tokens.scss and wire _vars.scss to use shared CSS custom
properties for colors, surfaces, and sidebar width.
2026-03-02 14:37:46 -07:00
zeekay 7195369ba2 fix: remove all hz_/pb_ prefixes, use clean names (public, data, migrations, hooks) 2026-03-02 14:24:33 -07:00
zeekay 38aba0db8e rebrand: PocketBase admin UI to Hanzo Base
- Replace all PocketBase/pocketbase text with Hanzo Base/hanzo-base
- Update pb_data/pb_migrations/pb_hooks references to data/migrations/hooks
- Replace logo and favicons with Hanzo H mark
- Update SCSS color variables to dark theme (bg #0A0A0A, primary #3B82F6)
- Rename TinyMCE skin directory from pocketbase/ to base/
- Add vite resolve alias so `from "base"` resolves to pocketbase npm package
- Update Dockerfile directory paths from pb_* to clean names
- Rebuild ui/dist with all changes
2026-03-02 14:20:20 -07:00
zeekay abaf14c649 feat: add Hanzo analytics tracking to base UI 2026-03-02 01:45:05 -07:00
zeekay 4b4d307330 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	.github/SECURITY.md
#	plugins/jsvm/internal/types/generated/types.d.ts
#	ui/dist/assets/AuthMethodsDocs-Dpd1KLEi.js
#	ui/dist/assets/AuthRefreshDocs-KmFqCz1h.js
#	ui/dist/assets/AuthWithOAuth2Docs-CyJfh606.js
#	ui/dist/assets/AuthWithOtpDocs-CuAOVtzX.js
#	ui/dist/assets/AuthWithPasswordDocs-CmHb4Jjn.js
#	ui/dist/assets/BatchApiDocs-LUXI6B6N.js
#	ui/dist/assets/DeleteApiDocs-KmnbmZ-6.js
#	ui/dist/assets/EmailChangeDocs-DhDDRSkd.js
#	ui/dist/assets/FieldsQueryParam-C7N80dkz.js
#	ui/dist/assets/ListApiDocs-BZTCC2fq.js
#	ui/dist/assets/PageInstaller-Cdywf0VY.js
#	ui/dist/assets/PageOAuth2RedirectFailure-9trAN4R5.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-BKErE1i9.js
#	ui/dist/assets/PageRecordConfirmEmailChange-B83GxdXn.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-72PfbDaZ.js
#	ui/dist/assets/PageRecordConfirmVerification-Cudgspq-.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-BvmdsmYF.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-B8e2B4ZR.js
#	ui/dist/assets/PasswordResetDocs-Do427Hpy.js
#	ui/dist/assets/RealtimeApiDocs-DydjyGiu.js
#	ui/dist/assets/VerificationDocs-CTnb2Ar3.js
#	ui/dist/assets/ViewApiDocs-D9o91Lhw.js
2026-02-27 08:57:15 -08:00
Gani Georgiev 9883b843ee updated ui/dist 2026-02-27 08:50:49 +02:00
Gani Georgiev b2334f8570 bumped npm deps 2026-02-27 08:27:57 +02:00
zeekay 4b229fae5b Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	core/record_field_resolver_multi_match.go
#	ui/dist/assets/AuthMethodsDocs-ChShXLwE.js
#	ui/dist/assets/AuthMethodsDocs-Cqvl0T_l.js
#	ui/dist/assets/AuthMethodsDocs-DIqhS7qY.js
#	ui/dist/assets/AuthRefreshDocs-CHakkNnn.js
#	ui/dist/assets/AuthRefreshDocs-DLb1qree.js
#	ui/dist/assets/AuthRefreshDocs-DXgrlMdk.js
#	ui/dist/assets/AuthWithOAuth2Docs-Bl8VRxNv.js
#	ui/dist/assets/AuthWithOAuth2Docs-DVBOel22.js
#	ui/dist/assets/AuthWithOAuth2Docs-I213UiJ7.js
#	ui/dist/assets/AuthWithOtpDocs-B9tL6gIN.js
#	ui/dist/assets/AuthWithOtpDocs-C2PPm9-Z.js
#	ui/dist/assets/AuthWithOtpDocs-qEMoMG3D.js
#	ui/dist/assets/AuthWithPasswordDocs-B8JWDbPL.js
#	ui/dist/assets/AuthWithPasswordDocs-BTHeYJwE.js
#	ui/dist/assets/AuthWithPasswordDocs-D9rqgLpO.js
#	ui/dist/assets/BatchApiDocs-BV4PYYXn.js
#	ui/dist/assets/BatchApiDocs-DXa997am.js
#	ui/dist/assets/BatchApiDocs-Di2Qe2dV.js
#	ui/dist/assets/DeleteApiDocs-C3IINRwz.js
#	ui/dist/assets/DeleteApiDocs-LfmVp4Uf.js
#	ui/dist/assets/DeleteApiDocs-SU4XdGhJ.js
#	ui/dist/assets/EmailChangeDocs-COx1USU5.js
#	ui/dist/assets/EmailChangeDocs-D-qNHT_P.js
#	ui/dist/assets/EmailChangeDocs-DpfXIE_V.js
#	ui/dist/assets/FieldsQueryParam-BYe9ZK-G.js
#	ui/dist/assets/FieldsQueryParam-L8vpHeF4.js
#	ui/dist/assets/FieldsQueryParam-z0dGQ6uY.js
#	ui/dist/assets/ListApiDocs-BCTT-AOz.js
#	ui/dist/assets/ListApiDocs-C0_GwI7k.js
#	ui/dist/assets/ListApiDocs-T9_aO-pW.js
#	ui/dist/assets/PageInstaller-B22bivaN.js
#	ui/dist/assets/PageInstaller-C0BBhyBx.js
#	ui/dist/assets/PageInstaller-IYSwJhZW.js
#	ui/dist/assets/PageOAuth2RedirectFailure-BjbpqlFj.js
#	ui/dist/assets/PageOAuth2RedirectFailure-COyNF79R.js
#	ui/dist/assets/PageOAuth2RedirectFailure-DPmGG9zv.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-6cMXLFAX.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-CdkCarGH.js
#	ui/dist/assets/PageOAuth2RedirectSuccess-DSEIHeQL.js
#	ui/dist/assets/PageRecordConfirmEmailChange-BYW-6ASg.js
#	ui/dist/assets/PageRecordConfirmEmailChange-Bm1CIYvq.js
#	ui/dist/assets/PageRecordConfirmEmailChange-BpaqOT4u.js
#	ui/dist/assets/PageRecordConfirmPasswordReset--wx_u2lI.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-CoeY2Z_C.js
#	ui/dist/assets/PageRecordConfirmPasswordReset-Ptya5bfe.js
#	ui/dist/assets/PageRecordConfirmVerification-6xjF3T0O.js
#	ui/dist/assets/PageRecordConfirmVerification-C1UTIIJh.js
#	ui/dist/assets/PageRecordConfirmVerification-C4LixXvA.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-19z2IFg4.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-DwNi0ugQ.js
#	ui/dist/assets/PageSuperuserConfirmPasswordReset-SMnDTRNi.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-BpDW217f.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-DK63qE6z.js
#	ui/dist/assets/PageSuperuserRequestPasswordReset-bG02qLIM.js
#	ui/dist/assets/PasswordResetDocs-CE67mLC0.js
#	ui/dist/assets/PasswordResetDocs-CHAK0vma.js
#	ui/dist/assets/PasswordResetDocs-Dap-N4rx.js
#	ui/dist/assets/RealtimeApiDocs-BooTSQCb.js
#	ui/dist/assets/RealtimeApiDocs-CoHmYVEx.js
#	ui/dist/assets/RealtimeApiDocs-D7ds3fHt.js
#	ui/dist/assets/VerificationDocs-B42AIoCQ.js
#	ui/dist/assets/VerificationDocs-BS7b11zH.js
#	ui/dist/assets/VerificationDocs-ZhkdFVIl.js
#	ui/dist/assets/ViewApiDocs-BXmRLHZ1.js
#	ui/dist/assets/ViewApiDocs-DM5JJQjh.js
#	ui/dist/assets/ViewApiDocs-DRpxcuJR.js
#	ui/public/fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff2
#	ui/public/fonts/ubuntu-mono/ubuntu-mono-v17-cyrillic_latin-700.woff2
2026-02-22 01:17:16 -08:00
Gani Georgiev dcef84b0a9 bumped app version 2026-02-18 20:00:31 +02:00
Gani Georgiev 1469e0e898 [#7532] added compositionend listener 2026-02-17 18:20:07 +02:00
Gani Georgiev 9dd8676774 [#7532] pause collection and fields name normalization while in IME mode 2026-02-17 17:29:38 +02:00
Gani Georgiev b2adf4018f bumped app version 2026-02-16 21:08:13 +02:00
Gani Georgiev 00d399e33f bumped app version 2026-02-13 17:21:34 +02:00
Gani Georgiev defd4965ee bumped app version 2026-02-01 09:40:10 +02:00
Gani Georgiev 4f2b2deb86 updated thumb style and title for non-previewable files 2026-01-23 00:34:58 +02:00
Gani Georgiev 9a0c9d538d regenerated jsvm types and bumped app version 2026-01-18 18:53:03 +02:00
Gani Georgiev 262c30e071 updated JSVM types and bumped app version 2026-01-15 22:24:07 +02:00
Gani Georgiev 6137ac599f updated ui version 2026-01-13 18:56:23 +02:00
Gani Georgiev 535cfd5b76 normalized multiple to single field confirmation detection 2026-01-06 18:33:44 +02:00
Gani Georgiev ef68d26a42 normalized relations picker maxSelect value 2026-01-06 18:19:01 +02:00
Gani Georgiev 82ef049e5b updated ui/dist 2025-12-19 19:25:08 +02:00