Skip to content

Releases: as9pa/brawlfarm

brawlfarm 1.1.0

Choose a tag to compare

@as9pa as9pa released this 18 Sep 04:14
6528e34

brawlfarm 1.1.0 is the panel release. Eight pull requests (23 to 30) rework the control panel page by page from the September 2026 design critique: one vocabulary, one component kit, and every page saying what it does in plain words. The farm loop, the never-tap logic and everything under brawlfarm/core are unchanged; the API grew three additive fields and routes and lost nothing.

Fleet and shell (PR 25)

  • One title per page: the top bar is a breadcrumb, every page body owns one h1, and a Skip to content link leads the tab order.
  • The connection state is a readable line under the bar (Live, Connecting, Reconnecting with how old the figures may be).
  • The alerts drawer locks the page behind it, groups rows under Today and Earlier, and Dismiss all asks first and can be undone.
  • The Fleet alert strip shows only alerts that need a hand: one alert, one sentence, one action, plus a link to all of them.
  • Fleet renders skeleton cards while loading, a labelled totals row for two or more instances, and Start all and Stop all with an undo.
  • Each card states its status once: a state chip plus one status line, metric labels in words, figures in mono, names in Archivo.

Instance page (PR 26)

  • Every panel shows a skeleton while its query is pending; no panel renders nothing or a row of zeros.
  • The header is the name, the state chip, one status line and the controls that apply; Restart asks first.
  • One reading order at every width (Live screen, Feed, Session, Farm plan, Schedule); two columns on a desk, a sticky jump bar below 1100 px.
  • The live screen says what it is doing in words, refreshes on its own schedule and stamps the frame time as a clock reading in its corner.
  • Session and plan figures update as events arrive and carry whole-word labels.
  • The feed groups lines by day, keeps Follow as a real switch and announces new lines politely.
  • The farm plan explains the goal field, confirms a save, labels the fallback and lists the roster as a list.
  • The schedule bar is readable, the override reads Running until 07:00 or Paused until 05:23 with a Resume schedule control, and every time carries the day and the local zone.

Stats (PR 27)

  • The range and instance filters live in the URL, so a view can be shared and reloaded.
  • The trophy chart draws one scale with labelled ticks that reach the values, a zero line on a losing range, and a day table under it.
  • The instance chips cannot all be turned off; the last one stays on and says why.
  • Rank bars state their numbers in words and figures, not colour alone.
  • The recent games table has sentence-case headers and scrolls inside its own box on a narrow window.
  • Export is a file download built from the same rows the page shows.

Settings and setup (PR 28)

  • Behavior explains the schedule in two sentences that follow the scheduler, and the schedule settings page folded into it.
  • Advanced switches say what off costs, mark what differs from the defaults and reset in one step.
  • One Danger zone at the end of Settings, Data, with red cues on the controls that lose data; each confirm names the word it wants typed.
  • Paths show whole with a Copy control; the ADB path fills its row instead of clipping.
  • A field save shows a dated caption naming the section instead of a toast; Check connection says whether the API accepted the token.
  • Notifications name their channels by their labels and list events in the order they matter.
  • Setup checks a typed adb path as typed, marks the rail with the real check results, names the required screen size from the same constants the check uses, and lands returning visits on Done.

Calibration (PR 29)

  • The page opens with a plain paragraph and names the screen it sees in words (Main menu, Finding players, In a match) instead of a state token.
  • The overlay draws crosshairs and boxes only, with hover labels carrying the match percentage, and a Screen filter narrows the marks.
  • The anchor table shows name, match percentage, a status word and a relative age with a dated title; hovering a row lights its point on the frame.
  • The Thresholds table lists every confidence value with its source (package or override) and stays read-only.
  • The recorder and observe cards say the recording cap before the switch is flipped.

Narrow screens and the README (PR 30)

  • Under 820 px the rail gains an Instances control that opens the instance list as a sheet, so a phone can reach an instance from any page.
  • Under 820 px the Settings section row fades at its scrolling edge so the off-screen sections are visibly there.
  • The four README screenshots are retaken from the finished panel in the dark theme with example instances only.

Vocabulary and kit (PR 23, PR 24)

  • One glossary for the panel's words: counts, mode names, empty states and error sentences come from one place, and a build-time guard fails when an internal word (worker, supervisor, tick, a raw key=value) reaches the screen.
  • The component kit carries the design rulings: a 6 px control and 10 px panel radius, one focus ring, Button variants primary, secondary, quiet and danger, Switch with distinct disabled states, Field with error and help lines, Toast tones with Retry and Undo, a ConfirmDialog that names its typed word, and a Table with sentence-case headers, column titles and row hover.

API additions (all additive)

  • retry_at on the instance payload and a restore endpoint so Dismiss all can be undone (PR 25).
  • GET /api/settings/defaults, read-only, so the Advanced group can mark and reset what differs from the defaults (PR 28).

Deferred, by design

  • An undo on clearing the schedule override needs an override write on PUT /schedule.
  • A takenAt field on the screenshot payload; the page still reads the frame time from the image response.
  • A test control on the ADB path (an endpoint that runs adb against the typed path).
  • Two-line rows for the recent games table on a phone; the box scrolls for now.
  • Overlay labels on the Calibration page have no keyboard focus path; the anchor table is the keyboard route.

Upgrade

pip install --upgrade brawlfarm

No settings change is needed. The 1.0.0 config file loads as it is; the schedule page's one switch now lives under Settings, Behavior.

brawlfarm 1.0.0

Choose a tag to compare

@as9pa as9pa released this 12 Sep 12:25

brawlfarm 1.0.0 is the first public release: a Brawl Stars trophy farmer for BlueStacks on Windows with a local web panel.

What you get

  • A farm core that plays matches on one or more BlueStacks instances, with verify-then-act screen logic, a never-tap list for anything that spends or buys, and a graceful stop at the menu.
  • A supervisor that runs one worker per instance, records every game to games.csv and every session to session-*.jsonl, and can be scheduled.
  • A FastAPI backend and a React panel: Fleet, Instance with live preview and farm plan editor, Stats with cumulative trophy charts and brawler icons, a first-run Setup wizard and Settings.
  • Notifications through ntfy, an optional Brawl Stars API connection for battle-log stats, and a setup guide in docs/setup.md.

Install

git clone https://github.com/as9pa/brawlfarm.git
cd brawlfarm
uv sync
uv run brawlfarm

See the README for the BlueStacks and Android Debug Bridge prerequisites and docs/setup.md for the walk-through.

Verification

CI on windows-latest: 690 pytest, 467 vitest tests in 64 files, ruff clean, scrub check 0 hits. Live passes against a real BlueStacks install are recorded per phase in docs/PLAN.md.

Known limits

  • Calibrated against the game UI as of September 2026; a recalibration for later game updates is the first item after v1.
  • The unreachable connection state has not been exercised live.
  • The supervisor reports scheduled_break for one tick after adding an instance, and an instance folder orphaned by Remove cannot be deleted from Settings, Data.