Commit graph

  • 986d94a778 feat(api): GET /api/agency/layouts - device-free layout geometry (#73) ScreenTinker 2026-06-14 13:53:30 -0500
  • 1f207c4278 feat(api): per-agency-token auto-publish (#73) ScreenTinker 2026-06-14 13:48:17 -0500
  • 79c453cd43 refactor(playlists): extract publishPlaylist() shared fn (#73) ScreenTinker 2026-06-14 13:48:17 -0500
  • efd4d7826c feat(ui): standalone agency upload portal (#73) ScreenTinker 2026-06-14 13:08:07 -0500
  • d59adfd10c feat(ui): agency token designation in Settings (#73) ScreenTinker 2026-06-14 13:08:07 -0500
  • 6d152a5ccf feat(api): GET /api/agency/playlists - a token's designated targets (#73) ScreenTinker 2026-06-14 13:08:07 -0500
  • 40102b2b41 feat(api): agency portal endpoints + router.param target seam (#73) ScreenTinker 2026-06-13 22:48:42 -0500
  • a59b53cc25 refactor(content): extract the upload ingest into a shared lib (#73) ScreenTinker 2026-06-13 22:48:42 -0500
  • c8a24d2243 feat(api): agency-token security primitive - off-ladder scope + agencyGate (#73) ScreenTinker 2026-06-13 21:30:38 -0500
  • f4c5865013 fix(server): strip totp_secret_enc/totp_last_step from login responses (#100) ScreenTinker 2026-06-13 20:48:25 -0500
  • 728f03beba test(server): TOTP - bite, lockout, replay, recovery, st_ bypass, key-rotation (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 1d3e9acea4 feat(server): TOTP MFA login flow + enrollment/verify endpoints (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • c38d8dc0e6 fix(server): rate-limit per endpoint, not the stripped req.path (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • c02086e305 feat(server): TOTP primitives - encrypted secret, hashed recovery codes, verify lockout (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • e1cd8591bb chore(server): TOTP schema + otplib dep (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • d1ade93ab3 fix(server): strip totp_secret_enc/totp_last_step from login responses (#100) ScreenTinker 2026-06-13 20:48:25 -0500
  • 1a12d9e23b test(server): TOTP - bite, lockout, replay, recovery, st_ bypass, key-rotation (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • a8b46f3787 feat(server): TOTP MFA login flow + enrollment/verify endpoints (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 05ca229b2e fix(server): rate-limit per endpoint, not the stripped req.path (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 1f14714515 feat(server): TOTP primitives - encrypted secret, hashed recovery codes, verify lockout (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • a15597ffa2 chore(server): TOTP schema + otplib dep (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 1f794ff7b4 chore(release): v1.9.1-beta1 v1.9.1-beta1 ScreenTinker 2026-06-12 22:37:50 -0500
  • 6add29bf6a fix(player): auto-relaunch after OTA self-update (#96) ScreenTinker 2026-06-12 22:21:50 -0500
  • 5bcaca7c51 fix(player): OTA install silently fails on Android 14+ (explicit PendingIntent) ScreenTinker 2026-06-12 22:21:50 -0500
  • 8d03741713 feat(server): make OTA observable - log update-check + apk-download hits (#96) ScreenTinker 2026-06-12 20:35:07 -0500
  • 47e1f620c4 fix(player): auto-relaunch after OTA self-update (#96) ScreenTinker 2026-06-12 22:21:50 -0500
  • 3f52643598 fix(player): OTA install silently fails on Android 14+ (explicit PendingIntent) ScreenTinker 2026-06-12 22:21:50 -0500
  • 1246902305 feat(server): make OTA observable - log update-check + apk-download hits (#96) ScreenTinker 2026-06-12 20:35:07 -0500
  • f06a87f4be fix(api): harden device pairing against brute-force (#87) ScreenTinker 2026-06-12 19:41:27 -0500
  • 3305e79e61 fix(api): consolidate device pairing to /pair, remove vestigial bare endpoint (#90) ScreenTinker 2026-06-12 19:20:00 -0500
  • 538f4a7b03 test(api): close #92 follow-up coverage gaps ScreenTinker 2026-06-12 19:10:25 -0500
  • 135aae1dc8 fix(api): harden device pairing against brute-force (#87) ScreenTinker 2026-06-12 19:41:27 -0500
  • 42d24c37c5 fix(api): consolidate device pairing to /pair, remove vestigial bare endpoint (#90) ScreenTinker 2026-06-12 19:20:00 -0500
  • a347bfb10e test(api): close #92 follow-up coverage gaps ScreenTinker 2026-06-12 19:10:25 -0500
  • 33eaef826c test(api): fix spec scope drift + guard it in CI; Redoc provenance ScreenTinker 2026-06-12 13:54:26 -0500
  • 2ad9f54b8e test(api): token partition + threat-model + device WS coverage ScreenTinker 2026-06-12 13:34:32 -0500
  • c1b9c27f3a docs(api): OpenAPI spec, Redoc at /docs, CI spec-lint ScreenTinker 2026-06-12 13:34:32 -0500
  • dce0d22763 fix(api): expose zone_id + layout_id on the public write paths ScreenTinker 2026-06-12 13:33:56 -0500
  • fab4ae909a feat(api): token management endpoints + Settings UI ScreenTinker 2026-06-12 13:33:56 -0500
  • 73ca3cf258 feat(api): scoped API token foundation + secure-by-exclusion mounts ScreenTinker 2026-06-12 13:33:17 -0500
  • feebca1b74 test(api): fix spec scope drift + guard it in CI; Redoc provenance ScreenTinker 2026-06-12 13:54:26 -0500
  • 613e1d23c3 test(api): token partition + threat-model + device WS coverage ScreenTinker 2026-06-12 13:34:32 -0500
  • 4645f833f0 docs(api): OpenAPI spec, Redoc at /docs, CI spec-lint ScreenTinker 2026-06-12 13:34:32 -0500
  • 33095acf5b fix(api): expose zone_id + layout_id on the public write paths ScreenTinker 2026-06-12 13:33:56 -0500
  • 55aa12e8ce feat(api): token management endpoints + Settings UI ScreenTinker 2026-06-12 13:33:56 -0500
  • 428da688f3 feat(api): scoped API token foundation + secure-by-exclusion mounts ScreenTinker 2026-06-12 13:33:17 -0500
  • 300d331562 fix(security): rate-limit the whole /api/provision pairing surface (#88) ScreenTinker 2026-06-12 10:38:32 -0500
  • 4ed5afbf1b fix(security): rate-limit the whole /api/provision pairing surface (#88) ScreenTinker 2026-06-12 10:38:32 -0500
  • 11e339dd89 ci(release): make the pipeline prerelease-aware (#80) ScreenTinker 2026-06-12 08:51:20 -0500
  • 444caa74f8 ci(release): make the pipeline prerelease-aware (#80) ScreenTinker 2026-06-12 08:51:20 -0500
  • bd732f4c48 fix(android): zone image falls back to server URL when not cached (#78) ScreenTinker 2026-06-12 08:39:09 -0500
  • 955902266d fix(android): zone image falls back to server URL when not cached (#78) ScreenTinker 2026-06-12 08:39:09 -0500
  • 68367cb3a3 fix(settings): show the real app version in the About section (#83) ScreenTinker 2026-06-12 08:09:19 -0500
  • 1b6423cb42 fix(settings): show the real app version in the About section (#83) ScreenTinker 2026-06-12 08:09:19 -0500
  • 4b688fcfb1 chore(release): v1.9.0 v1.9.0 ScreenTinker 2026-06-11 21:11:31 -0500
  • ba8a71c4f5 docs(changelog): finalize 1.9.0 release notes ScreenTinker 2026-06-11 21:11:30 -0500
  • 22376710ee fix(android): re-sign release APK with v1 (JAR) signature for MDM signage (#81) ScreenTinker 2026-06-11 21:02:18 -0500
  • 753da7656c fix(android): re-sign release APK with v1 (JAR) signature for MDM signage (#81) ScreenTinker 2026-06-11 21:02:18 -0500
  • 3ddc209d19 docs(readme): add Wise donation link to Support section ScreenTinker 2026-06-11 20:37:07 -0500
  • 2ccf3264a9 feat(scheduling): per-item schedule blocks (#74 dayparting, #75 auto-expire) ScreenTinker 2026-06-11 15:34:30 -0500
  • c8e664e66c fix(ws): guard fingerprint insert against stale device_id (FK violation noise) ScreenTinker 2026-06-11 15:33:20 -0500
  • 97ce0356f1 feat(scheduling): per-item schedule blocks (#74 dayparting, #75 auto-expire) ScreenTinker 2026-06-11 15:34:30 -0500
  • a5174afad3 fix(ws): guard fingerprint insert against stale device_id (FK violation noise) ScreenTinker 2026-06-11 15:33:20 -0500
  • e8a318e5fb chore(release): v1.8.3 v1.8.3 ScreenTinker 2026-06-11 09:38:42 -0500
  • 4d81bb112f fix(branding): inject instance branding into the app shell, no default flash (#76) ScreenTinker 2026-06-11 09:30:23 -0500
  • 53e32d31e2 fix(bump-version): do not rewrite the tizen config.xml XML declaration (#77) ScreenTinker 2026-06-11 08:56:59 -0500
  • 3545830ea6 chore(release): v1.8.2 v1.8.2 ScreenTinker 2026-06-11 08:42:57 -0500
  • c237a6fb27 fix(landing): correct comparison-table claims, mobile image, media-query bug ScreenTinker 2026-06-11 08:38:38 -0500
  • 10884ad87a docs: add RELEASING.md (bump -> push -> finalize ritual + ghcr note) ScreenTinker 2026-06-10 14:22:53 -0500
  • e9c89343d7 chore(release): v1.8.1 v1.8.1 ScreenTinker 2026-06-10 14:12:47 -0500
  • 5530d6cfcd docs: tag-based upgrade flow + upgrade.sh, Tizen install paths ScreenTinker 2026-06-10 14:12:29 -0500
  • fb17b242ce release: bundle .wgt in the CI tarball + finalize-release.sh for the signed apk ScreenTinker 2026-06-10 14:12:29 -0500
  • 4f56199bc7 chore(release): v1.8.0 v1.8.0 ScreenTinker 2026-06-10 13:46:17 -0500
  • 4771f62623 ci: release pipeline (tarball, tizen wgt, multi-arch docker) + Docker packaging ScreenTinker 2026-06-10 13:44:51 -0500
  • e2cd64054a ci: add CI workflow (unit tests + boot/version smoke) ScreenTinker 2026-06-10 13:24:46 -0500
  • 52b10408be chore(version): single-source VERSION, env-configurable data paths, bump tooling ScreenTinker 2026-06-10 12:56:03 -0500
  • 26cd29c530
    Merge pull request #72 from screentinker/feat/player-orientation screentinker 2026-06-09 21:43:12 -0500
  • dfc8a4e358 feat(player): software orientation (portrait + flipped) on both players (1.7.12) ScreenTinker 2026-06-09 21:43:08 -0500
  • f98bb57ab9
    Merge pull request #71 from screentinker/feat/backup-script screentinker 2026-06-09 19:53:12 -0500
  • 3ac81a4206 feat(ops): nightly backup script with point-in-time content history ScreenTinker 2026-06-09 19:53:09 -0500
  • 2cdf483f59
    Merge pull request #70 from screentinker/chore/tizen-signing screentinker 2026-06-09 19:10:32 -0500
  • 5396cf9896 chore(tizen): dev-signing setup + support@screentinker.net author email ScreenTinker 2026-06-09 19:10:28 -0500
  • 6bcd193e45
    Merge pull request #69 from screentinker/feat/tizen-player screentinker 2026-06-09 19:02:04 -0500
  • 0cfa09046c feat(tizen): Samsung Tizen TV web player (.wgt) ScreenTinker 2026-06-09 19:01:58 -0500
  • c20b5b9b6f
    Merge pull request #68 from screentinker/feat/android-boot-launch-tv screentinker 2026-06-09 17:45:05 -0500
  • d9d7a8ae0f feat(android): reliable boot-launch incl. Android TV (1.7.11) ScreenTinker 2026-06-09 17:44:49 -0500
  • acd93377e7
    Merge pull request #67 from screentinker/fix/android-ota-install-completion screentinker 2026-06-09 16:14:12 -0500
  • 5e3408be9a fix(android): OTA install never completed; auto-confirm for kiosks (1.7.10) ScreenTinker 2026-06-09 16:14:08 -0500
  • 91cf7ebee6
    Merge pull request #66 from screentinker/release/android-1.7.9 screentinker 2026-06-09 15:41:56 -0500
  • f392292b9e release(android): 1.7.9 — Android 14+ crash + YouTube 152 fixes ScreenTinker 2026-06-09 15:41:52 -0500
  • 64975fec88
    Merge pull request #65 from screentinker/fix/android-youtube-embed-152 screentinker 2026-06-09 15:36:49 -0500
  • 4572963175 fix(android): YouTube error 152 - embed under a third-party domain, not youtube.com ScreenTinker 2026-06-09 15:36:24 -0500
  • b88150c115
    Merge pull request #64 from screentinker/docs/help-ai-blurb screentinker 2026-06-09 13:58:57 -0500
  • 09f543fb8b docs(help): add AI Content Design quick-start to the in-app Help page (#41) ScreenTinker 2026-06-09 13:58:53 -0500
  • 4a64053d66
    Merge pull request #63 from screentinker/docs/local-ai-setup screentinker 2026-06-09 13:57:06 -0500
  • 1a4397ad24 docs: local AI setup guide for the Content Designer (#41) ScreenTinker 2026-06-09 13:57:02 -0500
  • c1aee36326
    Merge pull request #62 from screentinker/fix/ai-separate-image-key screentinker 2026-06-09 13:47:52 -0500
  • dc6424a3cc feat(ai): separate optional image API key (#41) ScreenTinker 2026-06-09 13:47:47 -0500
  • c23e8ca289
    Merge pull request #61 from screentinker/feat/ai-images-phase2 screentinker 2026-06-09 13:40:19 -0500
  • 303c83e86a feat(ai): generate background + foreground images for signs (#41 Phase 2) ScreenTinker 2026-06-09 13:40:14 -0500