Beulea's EVE Contracts v0.4.0
Added
- A title claiming more than the contract holds is now flagged. "10x Large
Skill Injectors" holding one, priced just under what ten would actually cost
at Jita, so the ask reads as a small discount once you do the math the title
invites. The title never lies about the contents - it says nothing about them
at all - so nothing else in the app catches this. Flags now shows "title
overcounts" whenever a whole-number count parsed from the title is more than
the contract actually holds of that one item; an honest listing (a "10x
Something" that really holds ten, whether in one line or several) is never
flagged, since it's judged by the total quantity, never by how many lines it's
split across. In the 2026-08-07 snapshot that's 6 contracts and about 29.75b
of asking price between them - the four already spotted plus two more of the
same pattern since. It takes the place of "overpriced"/"verify" on that row
rather than sitting beside them, since it already says why the price looks
like a deal. Shows the same warning, worded the same way, in the contract
detail dialog next to the price - not just the results row.
Changed
-
Refreshing the contract data is about a third faster — roughly 3.5 s down
to 2.5 s on the 48k-contract snapshot, plus whatever your connection takes off
the download, which now runs alongside the unpacking instead of before it.
Nothing about the results changes; there is just less waiting on the Refresh
button. -
The Refresh button says what it is actually doing. The download no longer
finishes before the unpacking starts - they run together - so the progress
text no longer claims a download that is still going.
Fixed
-
Contract titles with
<,>,&, quotes or apostrophes now read correctly
instead of showing the raw HTML escape a seller's punctuation turns into
upstream - "sig<" now reads "sig<", "(WTS) 980 Plex <> (WTB) 10 Skill
Extractor" now reads "(WTS) 980 Plex <> (WTB) 10 Skill Extractor", and so on.
About 65 of the roughly 48,000 titles in a given snapshot were affected,
everywhere a title appears: the results row, the contract detail dialog, the
compare dialog, and saved-search summaries. -
A broken refresh could quietly leave you with the wrong contracts. Usually
none at all - a rare failure inside the decompressor, contract data missing
from the download, or a download far larger than expected all looked like a
refresh that had worked, with no error and no contracts, and the app would not
try again until the data upstream changed. A malformed download could also go
the other way and count some contracts twice. Every one of them is now a plain
error that leaves the contracts you already had. Found by review rather than
in the wild. -
An empty column no longer sits at the left of the results in searches
where nothing can be compared. The + that adds a contract to the comparison
only applies to abyssal rolls, so wherever a page held none - most searches for
ships or blueprints - its column stood there with nothing in it. It now appears
only when something on the page actually carries a roll, which includes Ships
and Blueprints, since a pack can hold one alongside everything else. -
Blueprints: an ME/TE/runs floor now applies to the blueprint you picked.
With an item picked, the floors had to be met by some blueprint in the
contract, so a "10x cruiser BPOs" bundle passed a search for a Vexor
Blueprint with ME ≥ 10 on a sibling's ME while the Vexor itself sat at 7.
The floors now describe the blueprint you asked for. -
The ME / TE / Runs columns show the blueprint the search matched. On a
bundle they used to show whichever blueprint came first, so a row found by
"ME ≥ 10" could read ME 7. With no item picked, they show the line that
cleared your floors. -
A contract demanding PLEX is no longer read as free money. PLEX trades on
one market shared by all of New Eden rather than in any region, so Jita's
regional order book holds none of it and every PLEX line was valued at 0 ISK.
Most contracts that demand items ask for PLEX, so most of them were appraised
as if that cost nothing: one asking 1,340 PLEX for a 6.34b pack showed a
Net at Jita of over six billion in green, directly under its own red
"You must hand over" warning. PLEX is now priced where it actually trades
(~4.75m sell, 2026-08-05), and that contract reads as the rough break-even it
always was. -
Net is left blank rather than guessed when something you must hand over has
no price. Zbikoki's Hacker Card, a SKIN crate, a blueprint copy: anything
with no market price counted as worth nothing, which turned "and you also give
me this" into profit. Net at Jita on the contract card and Net in the
results table now read "—", the footnote says how many hand-over lines can't
be valued, and the verify badge stays off a contract whose cost is
unknown. PLEX was the loudest case rather than the only one, which is why the
guard is not about PLEX. -
The mirror case: Net now says what a demand costs you even when the goods on
offer can't be priced. The entry above withholds a figure when the side you
hand over is unknown; this one supplies the figure that was being withheld for
no reason. Net used to appear only when the app had a Jita value for what
you receive, so a contract holding one unquoted hull and demanding 340,000
PLEX showed nothing beside a price of 0 — while the cost of that demand was
known to the ISK. Both the results table and the contract card now state it.
Where nothing at all could be priced, Net still stays out of the way. -
The unpriced-lines footnote no longer points the wrong way. It said the
true value is higher than shown even when the unpriced line sat on the side
you hand over, where the truth is the opposite. Each side now gets its own
sentence. -
A researched blueprint original is no longer appraised as an unresearched
one. The market only ever quotes the untouched blueprint — ME and TE belong
to the individual copy, and no market order can carry them — so a
ME 10 / TE 20 original asking a fair 220m was measured against the 88.4m shelf
price and shown as a 131.6m loss. Researched originals now sit with blueprint
copies among the lines nothing can price: Jita value and Net stay
empty rather than wrong, and the asterisk beside the value counts them. In the
2026-08-05 snapshot that is 91% of the blueprint originals on offer. -
A contract costing far above what it holds is now flagged. The
"overpriced" verdict had been computed and tested since the appraisal shipped,
but no column ever showed it: the app warned about suspiciously cheap packs
and said nothing about a pack costing more than 1.5× its Jita value. It now
appears in Flags beside "asks items" and "verify". -
The verdicts and the percentage now count what you hand over, not just the
ISK price. A contract listing 6m ISK beside a demand for 1,340 PLEX was
called a bargain, given a verify badge, and shown as +615% — all
because only the 6m was ever weighed against the 6.35b of goods, while the
PLEX it also wanted sat in neither figure. Counting it, that contract is
within half a percent of breaking even, and which side of even it lands on
changes with the price of PLEX through the day. Items you must hand over now
count towards what a contract costs you, so a barter with no ISK price at all
gets a verdict too, where before it got none. -
The divider on the right of Location can be dragged now. Every other
column boundary could be grabbed and this one could not, so the only way to
narrow Location was to widen the column to its left - the opposite gesture to
the one the line invites. Pulling it left narrows Location and gives the room
to Price, exactly as it looks like it should. -
Dragging a column divider now moves the divider you grabbed. Only the
ones left of Location did. The divider on Location's own right edge could not
be grabbed at all, so the only way to narrow Location was to widen the column
to its left, the opposite gesture to the one the line invites. And every
divider to the right of Location moved a different line than the one under
the pointer: widening Price took the space out of Location, which slid Price
along with it and left the grabbed edge exactly where it started. Each
divider now takes its space from the column on the other side of that line,
so the boundary follows the pointer and nothing else on the row shifts. The
columns also stop jittering mid-drag, which they did whenever the row briefly
added up to more or less than the window. Resizing the app window while
holding a divider no longer disturbs the gesture either: the columns hold
still until you let go and then settle on the new window, instead of Location
jumping to a new width and sitting there, or the drag ending somewhere the
pointer never asked for. And a divider now answers to the finger that grabbed
it - a second one landing on the same divider mid-drag used to take the first
one's place, which sent the column shooting off to its narrowest, and a second
one on a DIFFERENT divider used to bring the mid-drag jitter back the moment
it was let go, and a second finger landing on a divider that is already busy no
longer stops responding until you lift it. Anything that happens while you are
dragging - the results reloading under you, a column being reordered, whether
by the arrow keys or by a drag started before you grabbed the divider - now
leaves the drag alone instead of bending it, giving a column the width meant
for its neighbour, or leaving one stuck at a width nothing would put right
until you restarted the app. Leaving the tab mid-drag is the same kind of
case - stepping to another one with the keyboard, or a second finger on a
touchscreen, while the first still holds the divider down - and no longer
flashes a column at its old width for a frame before settling on the right
one, which used to happen whenever the column you were resizing was the one
that lost its divider in the move (Expires, say, when leaving Favorites drops
the trailing Added column behind it). -
A saved search you've edited now says "Modified", not just a dot.
Changing a filter after applying a preset used to mark it with a bare
coloured dot and nothing else - the only place in the app that spoke in
colour alone, easy to mistake for the sort/resize/reorder accent that same
colour carries everywhere else. And the button beside it that discards those
edits back to the saved filters no longer uses the same circular-arrow icon
as the header's Refresh button, which sits right above it and does something
unrelated (pulls a new snapshot rather than touching your filters).
Download
| OS | File |
|---|---|
| macOS (Apple Silicon) | Beulea.s.EVE.Contracts_0.4.0_aarch64.dmg |
| Windows | Beulea.s.EVE.Contracts_0.4.0_x64-setup.exe |
| Linux | Beulea.s.EVE.Contracts_0.4.0_amd64.AppImage |
Neither the macOS nor the Windows build is code-signed - that needs a paid
certificate - so the first launch takes one extra step. macOS: open it,
Done, then System Settings → Privacy & Security → Open Anyway. Windows:
More info → Run anyway. Linux: chmod +x the AppImage (some distros
also need FUSE).
After that the app updates itself from this page: every build is minisign-signed
and the updater checks that signature before replacing anything. The .sig
files and latest.json are what makes that work - you don't need to download
them.