# Local changes to Shoutrrr AMOBIT Posts adaptation, 2026-09-20. Baseline: 85a789ddb98d0fcf0ad8d162f7653f010024ff1c. Original Apache-2.0 LICENSE and upstream copyright/attribution notices are retained. - Local Docker runtime, repeatable setup, database-isolated tests and network-isolated simulation. - Brand profile with native workspace permissions; fake publisher through native Post/Target/Attempt/queue. - Original Shoutrrr dashboard/sidebar/composer/calendar/accounts/settings reused with Russian labels. - Real dashboard totals/upcoming posts, attention filter, workspace timezone fallback, simulation attempt details. - Fortify login opens native dashboard. Old /studio URL redirects there; technical prototype source is retained. - Russian label adapter retains English fallback. Existing label-source checks updated for the adapter. - Licenses/notices inventory and unmodified MPL-2.0 Mediabunny source distributed under public/licenses/. Modified upstream source files carry an AMOBIT modification notice. Newly added files are identifiable in git status. No remote writes, live social publications, paid API calls or production migrations were performed. See README.local.md and ../PROJECT_STATUS.md for operation, validation evidence and remaining limitations. Modified upstream files at this checkpoint: - `.gitignore` - `app/Http/Controllers/DashboardController.php` - `app/Http/Controllers/Posts/PostController.php` - `app/Http/Middleware/HandleInertiaRequests.php` - `app/Services/Publishing/PublishConnectorRegistry.php` - `app/Services/Publishing/TokenManager.php` - `app/Support/PostView.php` - `bootstrap/providers.php` - `resources/js/app.tsx` - `resources/js/components/accounts/account-card.tsx` - `resources/js/components/accounts/connect-buttons.tsx` - `resources/js/components/common/alert-error.tsx` - `resources/js/components/common/confirm-dialog.tsx` - `resources/js/components/common/theme-toggle.tsx` - `resources/js/components/compose/__tests__/composer-preview-controls.test.ts` - `resources/js/components/compose/__tests__/composer-tabs.test.ts` - `resources/js/components/compose/__tests__/image-editor.test.ts` - `resources/js/components/compose/__tests__/mention-picker.test.tsx` - `resources/js/components/compose/__tests__/pick-time.test.ts` - `resources/js/components/compose/boost-popover.tsx` - `resources/js/components/compose/char-counter.tsx` - `resources/js/components/compose/composer-toolbar.test.tsx` - `resources/js/components/compose/composer-toolbar.tsx` - `resources/js/components/compose/composer.tsx` - `resources/js/components/compose/conflict-dialog.tsx` - `resources/js/components/compose/destination-selector.test.tsx` - `resources/js/components/compose/destination-selector.tsx` - `resources/js/components/compose/editor-body.tsx` - `resources/js/components/compose/emoji-picker.tsx` - `resources/js/components/compose/gif-picker.tsx` - `resources/js/components/compose/image-editor.tsx` - `resources/js/components/compose/media-chips.tsx` - `resources/js/components/compose/mention-picker.tsx` - `resources/js/components/compose/pick-time-popover.tsx` - `resources/js/components/compose/platform-preview-panel.tsx` - `resources/js/components/compose/platform-tabs.tsx` - `resources/js/components/compose/preview/facebook-preview.tsx` - `resources/js/components/compose/preview/instagram-preview.tsx` - `resources/js/components/compose/preview/reels-frame.tsx` - `resources/js/components/compose/queue-preview.tsx` - `resources/js/components/compose/save-indicator.tsx` - `resources/js/components/compose/schedule-tray.tsx` - `resources/js/components/compose/segment-media-row.tsx` - `resources/js/components/compose/submit-bar.tsx` - `resources/js/components/compose/target-status-chips.tsx` - `resources/js/components/compose/video-editor.tsx` - `resources/js/components/dashboard/recent-feed.tsx` - `resources/js/components/layout/app-sidebar-header.tsx` - `resources/js/components/layout/app-sidebar.tsx` - `resources/js/components/layout/command-palette.tsx` - `resources/js/components/layout/command-palette/compose-destination-page.tsx` - `resources/js/components/layout/command-palette/connect-platform-page.tsx` - `resources/js/components/layout/command-palette/posts-group.tsx` - `resources/js/components/layout/command-palette/theme-page.tsx` - `resources/js/components/layout/user-menu-content.tsx` - `resources/js/components/notifications/notification-bell.tsx` - `resources/js/components/posts/__tests__/published-post-view.test.ts` - `resources/js/components/posts/calendar/agenda-list.tsx` - `resources/js/components/posts/calendar/calendar-header.tsx` - `resources/js/components/posts/calendar/month-grid.tsx` - `resources/js/components/posts/calendar/post-chip.tsx` - `resources/js/components/posts/post-page-actions.tsx` - `resources/js/components/posts/post-preview.tsx` - `resources/js/components/posts/post-row-actions.tsx` - `resources/js/components/posts/post-row.tsx` - `resources/js/components/posts/published-post-view.tsx` - `resources/js/components/posts/share-dialog.tsx` - `resources/js/components/queue/add-time-popover.tsx` - `resources/js/components/queue/cadence-overview.tsx` - `resources/js/components/queue/day-column.tsx` - `resources/js/components/queue/quick-add-toolbar.tsx` - `resources/js/components/queue/save-bar.tsx` - `resources/js/components/queue/schedule-editor.tsx` - `resources/js/components/settings/appearance-tabs.tsx` - `resources/js/components/settings/create-api-key-dialog.tsx` - `resources/js/components/settings/create-sync-pipeline-dialog.tsx` - `resources/js/components/settings/delete-user.tsx` - `resources/js/components/settings/invite-member-dialog.tsx` - `resources/js/components/settings/manage-connected-accounts.tsx` - `resources/js/components/settings/members-table.tsx` - `resources/js/components/settings/pending-invitations-table.tsx` - `resources/js/components/settings/remove-instance-owner-dialog.tsx` - `resources/js/components/settings/remove-member-dialog.tsx` - `resources/js/components/settings/transfer-ownership-dialog.tsx` - `resources/js/components/ui/calendar.tsx` - `resources/js/components/ui/command.tsx` - `resources/js/components/workspace/create-workspace-dialog.tsx` - `resources/js/components/workspace/workspace-selector.tsx` - `resources/js/layouts/app/app-sidebar-layout.tsx` - `resources/js/layouts/settings/layout.tsx` - `resources/js/layouts/settings/workspace-layout.tsx` - `resources/js/lib/compose/publish-status.ts` - `resources/js/lib/compose/tiptap/setup.ts` - `resources/js/lib/datetime/dayjs.ts` - `resources/js/lib/navigation/workspace-settings-nav.ts` - `resources/js/lib/posts/live-status.ts` - `resources/js/lib/posts/permalink.ts` - `resources/js/lib/posts/status.ts` - `resources/js/lib/queue/queue-schedule.ts` - `resources/js/pages/accounts/connect-linkedin.tsx` - `resources/js/pages/accounts/connect-meta.tsx` - `resources/js/pages/accounts/index.tsx` - `resources/js/pages/compose/index.tsx` - `resources/js/pages/dashboard.tsx` - `resources/js/pages/posts/calendar/index.tsx` - `resources/js/pages/posts/index.tsx` - `resources/js/pages/queue/index.tsx` - `resources/js/pages/settings/appearance.tsx` - `resources/js/pages/settings/connections.tsx` - `resources/js/pages/settings/instance-admins.tsx` - `resources/js/pages/settings/instance-platforms.tsx` - `resources/js/pages/settings/instance-polling.tsx` - `resources/js/pages/settings/instance-usage.tsx` - `resources/js/pages/settings/instance-usage/workspace-quota-editor.tsx` - `resources/js/pages/settings/instance.tsx` - `resources/js/pages/settings/notifications.tsx` - `resources/js/pages/settings/profile.tsx` - `resources/js/pages/settings/security.tsx` - `resources/js/pages/settings/workspace/__tests__/overview-timezone-combobox.test.ts` - `resources/js/pages/settings/workspace/__tests__/subscription.test.ts` - `resources/js/pages/settings/workspace/api-keys.tsx` - `resources/js/pages/settings/workspace/members.tsx` - `resources/js/pages/settings/workspace/overview.tsx` - `resources/js/pages/settings/workspace/subscription.tsx` - `resources/js/types/compose.ts` - `resources/js/types/global.d.ts` - `routes/console.php` - `routes/web.php` ## Branding and legal distribution (2026-09-20) User-facing branding is Amobit Posts; upstream promotion, logo and version badge are removed from the cabinet. Native styles and free Hugeicons are retained. Public /licenses/ includes unchanged upstream LICENSE, third-party notices, font licenses and exact Mediabunny MPL source. Every Vite build regenerates notices and retains legal comments and a source-access banner. ### Final modified upstream paths (2026-09-20) - `.gitignore` - `app/Http/Controllers/DashboardController.php` - `app/Http/Controllers/Posts/PostController.php` - `app/Http/Middleware/HandleInertiaRequests.php` - `app/Services/Publishing/PublishConnectorRegistry.php` - `app/Services/Publishing/TokenManager.php` - `app/Support/PostView.php` - `bootstrap/providers.php` - `public/site.webmanifest` - `resources/js/app.tsx` - `resources/js/components/accounts/account-card.tsx` - `resources/js/components/accounts/connect-buttons.tsx` - `resources/js/components/common/alert-error.tsx` - `resources/js/components/common/confirm-dialog.tsx` - `resources/js/components/common/platform-glyph-stack.tsx` - `resources/js/components/common/theme-toggle.tsx` - `resources/js/components/compose/__tests__/composer-preview-controls.test.ts` - `resources/js/components/compose/__tests__/composer-tabs.test.ts` - `resources/js/components/compose/__tests__/image-editor.test.ts` - `resources/js/components/compose/__tests__/mention-picker.test.tsx` - `resources/js/components/compose/__tests__/pick-time.test.ts` - `resources/js/components/compose/boost-popover.tsx` - `resources/js/components/compose/char-counter.tsx` - `resources/js/components/compose/composer-toolbar.test.tsx` - `resources/js/components/compose/composer-toolbar.tsx` - `resources/js/components/compose/composer.tsx` - `resources/js/components/compose/conflict-dialog.tsx` - `resources/js/components/compose/destination-selector.test.tsx` - `resources/js/components/compose/destination-selector.tsx` - `resources/js/components/compose/editor-body.tsx` - `resources/js/components/compose/emoji-picker.tsx` - `resources/js/components/compose/gif-picker.tsx` - `resources/js/components/compose/image-editor.tsx` - `resources/js/components/compose/media-chips.tsx` - `resources/js/components/compose/mention-picker.tsx` - `resources/js/components/compose/pick-time-popover.tsx` - `resources/js/components/compose/platform-preview-panel.tsx` - `resources/js/components/compose/platform-tabs.tsx` - `resources/js/components/compose/preview/facebook-preview.tsx` - `resources/js/components/compose/preview/instagram-preview.tsx` - `resources/js/components/compose/preview/reels-frame.tsx` - `resources/js/components/compose/queue-preview.tsx` - `resources/js/components/compose/save-indicator.tsx` - `resources/js/components/compose/schedule-tray.tsx` - `resources/js/components/compose/segment-media-row.tsx` - `resources/js/components/compose/submit-bar.tsx` - `resources/js/components/compose/target-status-chips.tsx` - `resources/js/components/compose/video-editor.tsx` - `resources/js/components/dashboard/recent-feed.tsx` - `resources/js/components/layout/__tests__/app-sidebar.test.ts` - `resources/js/components/layout/app-logo-icon.tsx` - `resources/js/components/layout/app-logo.tsx` - `resources/js/components/layout/app-sidebar-header.tsx` - `resources/js/components/layout/app-sidebar.tsx` - `resources/js/components/layout/command-palette.tsx` - `resources/js/components/layout/command-palette/compose-destination-page.tsx` - `resources/js/components/layout/command-palette/connect-platform-page.tsx` - `resources/js/components/layout/command-palette/posts-group.tsx` - `resources/js/components/layout/command-palette/theme-page.tsx` - `resources/js/components/layout/sidebar-footer-card.tsx` - `resources/js/components/layout/user-menu-content.tsx` - `resources/js/components/notifications/notification-bell.tsx` - `resources/js/components/onboarding/welcome-modal.tsx` - `resources/js/components/posts/__tests__/published-post-view.test.ts` - `resources/js/components/posts/calendar/agenda-list.tsx` - `resources/js/components/posts/calendar/calendar-header.tsx` - `resources/js/components/posts/calendar/month-grid.tsx` - `resources/js/components/posts/calendar/post-chip.tsx` - `resources/js/components/posts/calendar/week-grid.tsx` - `resources/js/components/posts/post-page-actions.tsx` - `resources/js/components/posts/post-preview.tsx` - `resources/js/components/posts/post-row-actions.tsx` - `resources/js/components/posts/post-row.tsx` - `resources/js/components/posts/published-post-view.tsx` - `resources/js/components/posts/share-dialog.tsx` - `resources/js/components/queue/add-time-popover.tsx` - `resources/js/components/queue/cadence-overview.tsx` - `resources/js/components/queue/day-column.tsx` - `resources/js/components/queue/quick-add-toolbar.tsx` - `resources/js/components/queue/save-bar.tsx` - `resources/js/components/queue/schedule-editor.tsx` - `resources/js/components/settings/appearance-tabs.tsx` - `resources/js/components/settings/create-api-key-dialog.tsx` - `resources/js/components/settings/create-sync-pipeline-dialog.tsx` - `resources/js/components/settings/delete-user.tsx` - `resources/js/components/settings/invite-member-dialog.tsx` - `resources/js/components/settings/manage-connected-accounts.tsx` - `resources/js/components/settings/members-table.tsx` - `resources/js/components/settings/pending-invitations-table.tsx` - `resources/js/components/settings/remove-instance-owner-dialog.tsx` - `resources/js/components/settings/remove-member-dialog.tsx` - `resources/js/components/settings/transfer-ownership-dialog.tsx` - `resources/js/components/ui/calendar.tsx` - `resources/js/components/ui/command.tsx` - `resources/js/components/workspace/create-workspace-dialog.tsx` - `resources/js/components/workspace/workspace-selector.tsx` - `resources/js/layouts/app/app-sidebar-layout.tsx` - `resources/js/layouts/auth/__tests__/auth-brand-text.test.ts` - `resources/js/layouts/settings/layout.tsx` - `resources/js/layouts/settings/workspace-layout.tsx` - `resources/js/lib/compose/publish-status.ts` - `resources/js/lib/compose/tiptap/setup.ts` - `resources/js/lib/datetime/dayjs.ts` - `resources/js/lib/navigation/workspace-settings-nav.ts` - `resources/js/lib/posts/live-status.ts` - `resources/js/lib/posts/permalink.ts` - `resources/js/lib/posts/status.ts` - `resources/js/lib/queue/queue-schedule.ts` - `resources/js/pages/accounts/connect-linkedin.tsx` - `resources/js/pages/accounts/connect-meta.tsx` - `resources/js/pages/accounts/index.tsx` - `resources/js/pages/auth/login.tsx` - `resources/js/pages/auth/register.tsx` - `resources/js/pages/compose/index.tsx` - `resources/js/pages/dashboard.tsx` - `resources/js/pages/engagement/index.test.ts` - `resources/js/pages/engagement/index.tsx` - `resources/js/pages/error.tsx` - `resources/js/pages/mcp/landing.tsx` - `resources/js/pages/posts/calendar/index.tsx` - `resources/js/pages/posts/index.tsx` - `resources/js/pages/queue/index.tsx` - `resources/js/pages/settings/appearance.tsx` - `resources/js/pages/settings/connections.tsx` - `resources/js/pages/settings/instance-admins.tsx` - `resources/js/pages/settings/instance-platforms.tsx` - `resources/js/pages/settings/instance-polling.tsx` - `resources/js/pages/settings/instance-usage.tsx` - `resources/js/pages/settings/instance-usage/workspace-quota-editor.tsx` - `resources/js/pages/settings/instance.tsx` - `resources/js/pages/settings/notifications.tsx` - `resources/js/pages/settings/profile.tsx` - `resources/js/pages/settings/security.tsx` - `resources/js/pages/settings/workspace/__tests__/overview-timezone-combobox.test.ts` - `resources/js/pages/settings/workspace/__tests__/subscription.test.ts` - `resources/js/pages/settings/workspace/api-keys.tsx` - `resources/js/pages/settings/workspace/members.tsx` - `resources/js/pages/settings/workspace/overview.tsx` - `resources/js/pages/settings/workspace/subscription.tsx` - `resources/js/pages/share/show.tsx` - `resources/js/pages/sync.tsx` - `resources/js/types/compose.ts` - `resources/js/types/global.d.ts` - `resources/views/app.blade.php` - `routes/console.php` - `routes/web.php` - `vite.config.ts` 2026-09-20: accounts/index now displays every upstream platform and its actual capability/configuration state to both roles, including sandbox users. Connection actions remain sandbox-blocked; credentials and permissions are unchanged. 2026-09-20: primary actions now use flat Material-3-inspired tonal pill buttons with a blue Amobit palette, subtle elevation and tonal keyboard chips. Native layout, behavior, focus/disabled states and simulation restrictions remain intact. Final owner-supplied button color sampled from PNG: #2563EB with white text in both themes; hover #1D4ED8. Compose action icon: unmodified Edit03Icon from already installed @hugeicons/core-free-icons (MIT), diagonal pencil; no added dependency. 2026-09-20: approved user-supplied calendar and exact original Cyrillic company-wordmark crop replace the temporary brand icon/name. Added responsive sidebar/login lockup, PNG/ICO/favicon/app sizes and maskable icon; dark-mode light backing preserves original wordmark colors. Sources retained under resources/brand/originals; no generated lettering or raster-in-SVG. Owner correction: remove the lockup backing completely. Dark/system-dark uses a separate white RGB wordmark with the exact original alpha contour; original-color crop and originals remain unchanged. Sidebar animation correction: brand header remains 56px high and calendar 32px in both expanded/collapsed states; fade/crop the wordmark without reflowing the navigation. Sidebar alignment: expanded brand/calendar, workspace avatar and compose pencil align with the native navigation icon centerline; wordmark/workspace/compose labels share its text inset. Calendar/avatar are 24px; fixed row heights and no-reflow collapse remain in place. Posts label retained per owner. - По уточнению владельца BrandLockup упрощён до календаря и Posts в одну строку; фирменный wordmark скрыт из композиции, исходные файлы сохранены. - Последующее уточнение: в раскрытой композиции только оригинальная надпись Амобит + Posts; календарь плавно появляется лишь при сворачивании sidebar. Геометрия строк фиксирована. - Финальное уточнение sidebar: вместо подмены на календарь wordmark обрезается до оригинальной А; живой текст Posts плавно центрируется под ней. Календарь сохранён в favicon/app assets.