Skip to content

feat(app): remove ads and Modrinth green from the app shell - #7932

Closed
ilaigibb wants to merge 156 commits into
modrinth:mainfrom
amberitedev:t3/remove-green-ui-logs-state
Closed

ilaigibb wants to merge 156 commits into
modrinth:mainfrom
amberitedev:t3/remove-green-ui-logs-state

Conversation

@ilaigibb

Copy link
Copy Markdown

Problem

The App still shipped Modrinth's ad surface (the native ads window, the Modrinth Hosting promo, the "Upgrade to Modrinth+" links and the ad consent UI), plus leftover Modrinth green: green Play buttons and "New instance" tags on Home, a green tint behind every modal, and a green ASCII frog in the empty logs view. News also took most of the right sidebar, leaving little room for friends.

Solution

  • Ads removed. Deleted the Tauri ads plugin (Rust, occlusion helpers, consent scripts, capability), helpers/ads.js, PromotionWrapper, the ad consent popup and the consent block in Privacy settings, the Modrinth+ links, and every ads-window hold around modals, fullscreen, the image editor and the survey popup.
  • Green removed from the Home Play button, the "New instance" tag and the project version install button (now brand color). Success and status greens (copied checkmarks, ping, valid Java) are unchanged.
  • Modal backdrop gradient is now neutral gray instead of green-tinted.
  • Logs empty state shows a dimmed terminal icon with one line of text over a blank terminal, instead of the frog and speech bubble. Applies to the shared console, so server consoles get it too.
  • News is renamed "Modrinth news" and moved to a panel pinned to the bottom of the sidebar. Collapsing it leaves only its header row; the state is remembered. It hides when a page fills the sidebar itself, as before.
  • Getting started can be dismissed with an X. This is remembered per install.

Verification

  • eslint and prettier on the touched frontend files: clean.
  • rustfmt --check on the touched Rust files: clean. No Rust build was run locally, so CI is the first compile of the plugin removal.
  • vue-tsc on apps/app-frontend already fails on main in files this PR does not touch; no new errors come from the changed files.
  • Not run against the live App, so there are no before/after screenshots yet.

Made by Claude Opus 5.5 in T3 Code (Claude Code harness).

🤖 Generated with Claude Code

ilaigibb added 30 commits May 6, 2026 17:23
- Add new packages/design-inspector package with Vue plugin
- Update Storybook main.ts and preview.ts configuration
- Add Overview.stories.ts story file
- Add opencode.json config
- Update app-frontend vite config and main.js
- Update pnpm lockfile (vite resolution, storybook addon-docs, semver, vue-component-type-helpers)
- Add apps/core/: Rust/Axum Core server with layered architecture (domain/application/infrastructure/presentation)
- Add 6 Core migrations (instances, mods, pairing flow)
- Add apps/app/src/api/amberite/: pairing, ws-ticket, Core-passthrough endpoints
- Add apps/app-frontend/src/pages/server/: Console, Content, Overview, Index pages
- Add API mock, Core connection helpers, updated route registration
- Add PROJECT.md, .plan docs, updated AGENTS.md
- Enable vite-plugin-vue-devtools in frontend build
- New core-client package for App-to-Core communication
- Backup service, scheduler, and UI components
- File system service and Files page for server instances
- Rewrite hosting plan documentation
- Remove api-mock.ts and its import from main.js
- Switch Servers.vue to fetch instances from CoreApiClient
- Add routing for 'synced' profile kind to new /synced pages
- Use useModrinthServersConsole composable in server console
- Add error handling UI when Core is unavailable
- Update browse modpacks/content to pass source=core param
- Rename packages/core-client to packages/api-lib with full PlatformAdapter architecture
- Desktop adapter uses tauriFetch (bypasses WebView CORS) + 3 Tauri invokes (token, URL, keychain)
- Delete 7 Rust modules from amberite-lib (core_client, instances, modpacks, friends, groups, supabase_client, mod_sync)
- Add microsoft-auth and provision-core-machine-account Supabase Edge Functions
- Add core_registrations, core_messages, core_group_members tables with RLS policies
- Supabase Realtime relay for Core/client communication with 2-phase acknowledgment
- Add desktop.ts PlatformAdapter singleton and adapters/ directory
- Add AGENTS.md documentation across packages and apps
- New `@amberite/tari-devtools` package with MCP tools: status, console, JS errors, network, performance, page info, Vue warnings
- Enable CDP remote debugging (`--remote-debugging-port=9222`) automatically in debug Tauri builds
- OpenCode plugin registered to surface DevTools tools in AI-assisted sessions
- Remove `VueScanPlugin` (unused render tracker dependency)
- Make `getDesktopAdapter` synchronous (removed unnecessary async)
- Fix async listener cleanup pattern in Instance, QuickInstanceSwitcher, server/Index, instance/Index, Mods pages (move listeners inside conditional, guard `onUnmounted` null-safety)
- Move Tauri window config from `tauri.conf.json` to `main.rs`
- Add retry backoff to design-inspector's autocomplete fetch
Move desktop sessions to the OS keychain, replace the broken local Core token path with Convex-backed setup/pairing flows, and remove stale Supabase/Deno runtime code.
Core: add repair_instance and change_version services (refuse while
running, reinstall via shared spawn_jar_install), update_version store
method, and recursive data-dir storage_bytes in StatsResponse. Wire
POST /instances/:id/repair and /change-version routes.

amberite-api: add repair() and changeVersion() client methods,
CoreChangeVersionBody type, CoreStats.storage_bytes, and endpoint
policies for the new lifecycle routes.

app-frontend: wire repairServer/changeVersion through the Core server
runtime and providers, surface installing/broken install state on the
hosting server view, and map real storage usage into stats.
Expose ProfileInstallStage via app-lib api::data and handle install_stage
in EditProfile/profile_edit. Navigate to the new instance after server
creation, add a loading spinner to ServerIndex, and allow the desktop
HTTP/CSP allowlists to reach localhost:16662. Includes regenerated
locale and AGENTS metadata from the i18n pass.
Replace the uploadFiles no-op with a real .jar file picker that uploads
to Core via uploadModFile, and surface the installed modpack manifest
(with unlink support) in the server content manager.
Add structured jvm_args/server_args overrides plus memory bounds that the
launch builder consumes (resolve_launch applies overrides; default_launch_args
renders the override-free baseline). PATCH /instances/:id now accepts memory,
jvm_args, and server_args (null clears an override). New GET /startup returns
current settings with rendered default/effective command strings.

Adds migration 013 (jvm_args, server_args columns) and a networking/remote-access
design doc.
Extend CorePatchInstanceBody with memory/jvm_args/server_args, add
CoreStartupSettings type, and expose updateMemory/updateStartup/getStartup on
CoreApiClient. Register the core.startup.get endpoint policy/route. Adds
integration tests covering getStartup, updateMemory, and set/clear of
jvm_args/server_args (20/20 integration tests pass).
Add Core-native ServerStats.vue + server-stats-chart.ts (no packages/ui Archon
dependency) and use it in ServerOverview. Register content/backups child routes,
fix the 3-dot overflow menu hitbox in ServerIndex, and tidy the recent-instance
divider/listener lifecycle in QuickInstanceSwitcher.
Add a Core-native settings modal (own controller + NewModal shell, no
packages/ui Archon dependency) wired into the server header gear button and
provideServerSettingsModal.openServerSettings. Tabs:
- General: rename, memory bounds, Java version
- Installation: change game version/loader + repair
- Network: primary server port
- Properties: full server.properties editor with search
- Advanced: jvm_args/server_args + effective launch-command preview

All tabs talk directly to Amberite Core via the amberite-api client.
The shared ServerManageHeader hardcodes a .modrinth.gg suffix on the address.
Fork a lean Core-native header that shows the raw address (127.0.0.1:port),
dropping Medal/Nuxt/project-linking branches, and use it in ServerIndex.
ilaigibb and others added 27 commits October 11, 2026 14:45
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
feat: pair a Core to your account with a code
An instance is one more pack source: the App uploads its export through the
existing modpack upload route with an 'instance' field (id and name).

- Upload links on first use and updates afterwards. A linked server accepts
  an upload while running; it stays pending and applies on the next stop.
- POST content/modpack/update applies the newest pushed version now,
  restarting a running server. A stopped server stays stopped.
- The content list reports the linked pack and from-pack flags, honors
  from_modpack, and lists client-only pack content with installed=false.
  Pack content cannot be deleted or toggled on the server.
- Unlink goes through the engine. DELETE /local/servers/:id deletes a server.
- Server list rows carry linked_instance and power_state.

Simpler choices made here: a pushed version is the archive's hash, so every
different upload is a new version. The shared-instance adapter that fetched
from the sharing backend is removed (the backend is never involved), along
with the unused modpack manifest store. Restaging no longer deletes the
uploaded archive it stages from.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Until the first pushed pack applies, the server has no game version, which
the hosting API read as 'needs setup'. It now reports installing, and the
content list reports the pack's install or failure. Project and version ids
are read from Modrinth CDN urls, so an exported pack lists by name.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Upload an instance to a Core server, apply a pushed update now, delete a
server, and the linked-instance fields Core adds to servers and content.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Server setup gets a 'From instance' option, and a modal opens the same
  setup at its last step for one instance.
- Push buttons: 'Push and restart' and 'Push update' update every server
  linked to the instance, asking first when players are online. A shared
  instance still publishes to friends through the existing review; the
  Share page and the unshared-changes banner now use these same buttons.

Simpler choices: the export includes mods and config; the pack is read
back through the existing file_read_dragged_file command, so app-lib is
untouched; the friends review only opens when the instance is stale.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Instance > Worlds lists linked servers with a Linked tag, their state and
  Manage, and 'Add server' is one button with a menu.
- The server Content page shows the instance's content read-only in the
  modpack card, titled with the instance's name, with 'Update from
  instance' and Unlink in the card's menu.
- Server settings > General can delete a self-hosted server.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
'From instance' in server setup now opens a step that lists the user's
instances with search and a Select button, in the style of the list used
when adding a mod to an instance, instead of expanding a list inline.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The option was shown whenever a Core address was configured. Core only
answers its owner, so it now depends on the server list having loaded.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Installation settings for a server linked to an instance talk about the
  instance: 'Linked instance', 'Unlink instance', and its own description.
  'Change version' and 'Re-install modpack' are hidden there, since both
  would replace the instance with an uploaded pack file.
- The Content card no longer shows 'Update from instance' all the time. It
  shows 'Restart to apply' while a pushed update waits for a stop, and
  'Retry update' after a failed one. Nothing when the server is up to date.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tton

- The review always opens and only allows a push when something changed.
  With linked servers it offers 'Push and restart' and 'Push update';
  otherwise just 'Push update'. When friends are already up to date it
  lists what the server is missing instead.
- One 'Push update' button on the Share page and the unshared-changes
  banner, as before. The push buttons are gone from the Worlds toolbar.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A linked server is now an ordinary Worlds row: same size, ping, MOTD and
Play button as any other server, with the link chip next to its name.
Clicking the row opens the server; 'Manage server' is also in its menu.
While an update is in progress, waiting for a stop, or failed, that
replaces the MOTD. The custom row and its Manage button are removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Search sits inside the same edge-to-edge panel, with the same rows and icons.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…he server

The exported pack only marks a mod client-only from its version's environment, which many
mods leave empty. Core now also checks the project's server support, the same rule as adding
a mod by hand. If Modrinth can't be reached the pack's own env is used.

Also makes the instance picker's search field full width.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…urvive a failed upload

Servers page: New server opens the setup modal and only creates the server on confirm.
Premade states replace raw errors: Core offline, Core owned by someone else, no servers,
no search results, and static ghost rows while loading. A gear opens Core settings (the
Cores tab does not exist yet, so it opens settings).

A server created from an instance is linked on the Core as it is created, before the pack
uploads. If the upload fails the server stays and the instance shows a banner with Push
update. Simpler option taken: the banner reuses the existing push review.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…button

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The server list is checked in the background from app start, without retries, so the
Servers page opens on the list or on Core offline with no wait. Offline needs two failed
checks once the Core has answered, and one success brings the list back, so the page does
not flash. Ghost rows only cover a cold start with no answer after 300ms.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Follows main's Core pairing: a new server goes on a paired Core (asked only when there
are several), and the Servers page shows Pair a Core when the account has none. The Cores
settings button now opens the Cores tab. Paired Cores are also looked up from app start so
the page opens on the right state.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
feat: servers created from an instance that keep following it
Drop the native ads plugin, the Modrinth Hosting and Modrinth+ promos, and
the ad consent UI. Move news into a collapsible panel pinned to the bottom
of the sidebar, make Getting started dismissible, neutralize the modal
backdrop tint, and replace the frog in the logs empty state with a dimmed
terminal placeholder.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ilaigibb

Copy link
Copy Markdown
Author

Opened against the wrong repository by mistake. Sorry for the noise.

@ilaigibb ilaigibb closed this Oct 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Pull request changelog

App

Added

Changed

Deprecated

Removed

Fixed

Security

Website

Added

Changed

Deprecated

Removed

Fixed

Security

Hosting

Added

Changed

Deprecated

Removed

Fixed

Security

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant