Introducing Bulky - overlay tool for bulk trading

TLDR

Bulky is an in-game layover bulk trading app. It aims to provide a bulk trading experience that doesn't require alt-tabbing. It currently supports 12 item categories, but the highlight is 8-mod map trading, including regex searches. Regexes are also provided to the seller, meaning neither of you has to leave the game for the trade. Other notable features include trading full fragment sets (among others Elder, Shaper or Legion Sets) or expedition logbooks (listed by their most valuable faction). Your offers recompute and auto-sync once every 10 minutes. Manual updates are possible as well.

Download Link: https://github.com/DanRiess/bulky/releases

Explanation Video: https://youtu.be/TYsuYtwWkSU

There's also a reddit post here: https://www.reddit.com/r/pathofexile/comments/1lcj8s4/introducing_bulky_an_overlay_tool_for_bulk_trading/

Introduction

Hey guys, and welcome to the introduction of Bulky. Bulky is an in-game layover app for bulk trading in PoE1. It uses the same technology that Awakened PoE Trade is using to attach itself to the game and can be opened with a key combination (CTRL + SPACE by default). Sign in is handled via GGG's Oauth system. Once signed in, you can search for items or create your own offers.
If you found what you were looking for and click the whisper button, a message will automatically be sent to the seller, who can then ignore you just like you are used to from the official trade site!
The video above offers an introduction into how to use it.

Motivation

Originally, the app was supposed to be a solution for compass and scarab trading. Good times. Then, GGG thankfully removed compasses altogether and introduced the Currency exchange. This made a large part of Bulky obsolete. I changed the focus to things that were not easily bulk-tradeable (yet). A major pain point of endgame farming was and is buying 8 mod maps. Other things, like logbooks or complete sets are also hard to trade for without third party apps.

Disclaimer

This app is my personal playground to try new stuff that I cannot do at work due to time constraints. It was supposed to be a fun side project, which, for me, meant I didn't have to write test cases (because tests are for boomers anyway!). Unfortunately, due to the introduction of above mentioned features, the app absolutely exploded in scope and complexity. I also have no idea how it will handle actual production environment load. Expect many bugs and treat 3.26 as an early access version. I will improve and fix things, but it will take some time.

Buying Things

In the bazaar tab, you will see a list of categories, offers that match your search and a filter. Categories are self-explanatory I think, just select the one you are interested in and hope something shows up in the offers.

An offer card will have some basic information about the seller, this offer's chaos/div ratio, the [poe.ninja](http://poe.ninja) multiplier and a list of items that match your filter with their respective price, as well as total price at the top. The offers that show up depend on the filter you use, which we will talk about next.

Filtering

For most categories, filtering is straight-forward. Most filters have a maximum Multiplier rule. When offers are created, prices are based on poe.ninja, and the seller can adjust these by applying a multiplier. Choosing a lower multiplier will remove offers that were created with a higher one. Most filters also have an option to buy out the full listing, which does exactly what you think it does. It'll send a message to the seller saying you want the entire category. If you don't choose full buyout, you can instead select up to 4 individual items from that category. There is also a checkbox that enables you to buy out the maximum quantity that the seller has, so you don't have to adjust it yourself.

Special Case: Filtering Fragments

Fragments have an additional filter option, full Sets. If you choose this, Bulky will scan the fragment offers and piece together the sets that you are looking for and their quantity in that offer. Potentially useful for boss farming.

Special Case: Filtering 8 mod Maps

8 mod filters are special. You have to pick a single map that you want to trade for. You can then decide what kind of a 'base' you are looking for. Bases in this case are default 8 mod maps, 8 mod maps with delirium applied (check the Delirious checkbox), 8 mod maps with Originator influence applied (check the Originator checkbox) or 8 mod maps with both of these.

I don't know if that originator filtering makes sense, but decided to prematurely implement it. Mark mentioned that these maps can be self-farmed. They might not even be able to drop corrupted though. Time will tell.

After you have picked your base, you can add a regex. Bulky will apply the regex to the offers and show you the matches. If you whisper a player, they can copy the regex from their trade popup (more on that later) without leaving the game.

Selling Things

In the shop tab, you'll see your current offers. They are currently capped at 3 at a time. Click the button to create a new offer. You will see a stash tab pane, an options pane and an item pane. Sync your stash tabs. This is necessary only once or whenever you buy more tabs or switch your league. Select a category and the stash(es) that contain items for that category. Now sync the stash items (the other sync button) and you'll see relevant items for your category. If you don't see any but think you should, make sure you selected the correct category.

Item prices are based on poe.ninja. You have 2 ways of manipulating them. Adjusting the multiplier slider in the options pane will apply a global multiplier to all items.

The toggle on the item next to its price is an override toggle. Clicking that will allow you to set a custom price for this one item. It will ignore the global multiplier as well.

You can also specify this offer as full buyout only, or define a minimum price that has to be met for a buyer to message you.

Offer Lifetime

After you have generated an offer, you will see it in the Shop tab, as well as its activity. In general, offers are valid for 10 minutes. At the bottom left of the card, there is a synchronize button. This will cause Bulky to auto-update your offer every 10 minutes. For this purpose, the stash tab(s) will be fetched again, the offer will be recomputed (taking into account your previous selection, price overrides, etc.) and reuploaded.

This feature only works if the total value of the recomputed offer is at least 100c. You can also raise this value in the settings if you wish.

*Important*: I reserve the right to change this feature if it causes server costs to skyrocket. I have a rough idea of how much it will cost, but my calculations might be way off.

Special Case: Categories with non-tracked items

For some categories, poe.ninja doesn't provide price information. For those items, you have to set custom prices.

* Maps: Elder Guardian and Conqueror maps are not being tracked. Set manually.
* Heist: Neither contracts nor blueprints are being tracked. Rogue Markers are tracked but Bulky doesn't apply them correctly. Manually set all of those if you need to.
* Expedition: Logbooks are not being tracked. They are a special case I will get to later.
* 8 Mod Maps: We will get to those later as well.

Special Case: Expedition Logbooks

For each expedition logbook level, you need to define the price that each faction should cost. Bulky will then analyze your logbooks and list them for the highest possible price.

For example, your logbook has Gwennen, Rog and Dannig as faction options. The prices you provided for Druids of the Broken Circle (Gwennen) are 7c, Order of the Chalice (Rog) 10c and Knights of the Sun (Dannig) 12c. Bulky will list this logbook for 12c as Knights of the Sun. If you later change the price of Order of the Chalice to 14c, Bulky will now treat it as an Order of the Chalice logbook and list it for 14c.

Special Case: 8 Mod Maps

We talked about those in the buying section already. Bulky will analyze your provided stash tabs for 8 mod maps and divide them into maps with delirium layers, originator influence, neither or both of those options. For all found options you can define a base price. If you leave it at 0, that specific base type will not be listed.

If you click the allow regex button, you'll see a list of possible regex types. You can enable and disable each type individually as you please. For each of these types, you can charge an additional price. This price will be added to the base price you defined in the previous step.

As an example, you sell default City Square maps for 10c and Delirious City Square Maps for 15c. You allow avoid (+2c) and wanted (+4c) modifier regexes, but not quant and pack size ones. A user searches for delirious City Squares, in his regex he wants to avoid elemental reflect and he wants more rare monsters. This brings the price to 15 (base) + 2 (avoid mods) + 4 (wanted mods) = 21c per map. If the user were to also add a minimum quantity part to his regex, your offer would no longer be eligible and he won't be able to message you.

Disclaimer: To enable client side regex filtering, map modifier information has to be provided. This makes the transferred data per offer quite large. This is why currently a maximum of 576 maps, or 1 full quad tab, can be uploaded.

Receiving Whispers

Upon receiving a whisper, a small popup window opens. By default, this is at the bottom right of the screen, but you can change its position in the settings. The popup lists the individual items, the full price and a couple of utility function buttons (invite, initiate trade, kick and copy regex if one was provided). If this is too distracting to you, you can force hide the notifications. In this case, only the bell icon will be displayed and you need to click it to open them.

Initial Setup

You can download the app here: https://github.com/DanRiess/bulky/releases.

Please be aware that this is the only download service I provide. If you get this app from somewhere else, it might have been tampered with.

Once you have installed Bulky, just run it. It will attach itself to Path of Exile. Upon running PoE, you will shortly see a message box. After it disappears, open the overlay with CTRL + SPACE. If you are playing the 3.26 league, you first need to switch the league, go to settings and select the new league. Then, check out other offers or upload your own.

Known issues

* There is currently no system tray icon, which makes stopping a running Bulky application annoying. You will have to open the task manager (CTRL + SHIFT + ESC), search for bulky and end the process.
* Bulky will occasionally misjudge the size of your PoE window and think it's smaller than it actually is. This will cause the main window to shift, and more annoyingly, it will cause the notification popups more towards the middle of the screen.

FAQ

Is this open source?

Yes. The repository is open source. However, due to the lack of automated testing (remember, tests are still for boomers), I'm unlikely to accept PRs at this time. It's a good place to bring up issues though.

What other features are planned?

A wealth tracker would be the obvious next addition. Other categories might be added as well. Services will not be added. Settling disputes sounds even less fun than writing tests.

When I think gaming, I think Mac!

If that is you, I have bad news. While this app is based on Electron, I could not even manage to build mac and linux versions. For now, it's Windows only.

We no speak americano!

Since I started writing the app without a plan, I didn't incorporate a translation framework. Now it's kinda late. I might add one in the future though. For now, you will have to make do with English.

[Removed by Support]
Last edited by Cameron_GGG#0000 on Jun 16, 2025, 10:36:24 PM
Last bumped on Jun 18, 2025, 2:07:04 AM
Was this code generated by ChatGPT?

It seems remarkably... scatterbrained and inept for something produced by a human.





Let's look at https://github.com/DanRiess/bulky/blob/main/apps/electron/src/main/index.ts;

The entire file is littered with excessive comments to an extent I have never before encountered...



Lines 37 through 43, inclusive, include the following comments;

"
// Set the path of electron.exe and your app.
// These two additional parameters are only available on windows.
// Setting this is required to get it working in dev mode.

Comments in the Bulky application should relate to how Bulky itself is architected. The majority of the comments instead read as being some kind of introduction to Electron as a framework, which is... perculiar, and surely out of scope? And also, I mean... "and your app". REALLY?!



Lines 124 through to 133 includes the following comments;

"
/**
* Sign the received ggg oauth token response.
*/

Firstly - this is admittedly a nitpick, but I would expect a human to capitalise "GGG" - something AI wouldn't necessarily think to do.

Secondly... why do we keep bouncing backwards and forwards between different comment formats? Sometimes multiple single-line comments in a row, then multi-line comments, then we go back to several repeated single-line comments. A human would be expected to have a perference and stick to it - whereas AI would be more likely to regurgitate code it has previously seen elsewhere, which would explain the rampant inconsistency we see throughout """your""" code.



Lines 210 and 211;

"
// fixes a transparency issue in linux
// https://github.com/electron/electron/issues/25153#issuecomment-871345288

We're supporting Linux, now? Awesome!

As an aside, ironically this is exactly where the commenting could have been a bit more thorough. The associated code is changing the opacity, and then changing it back. This seemingly nonsensical move is apparently performed to combat a Linux-exclusive transparency bug in Electron. It's a cool hack, don't get me wrong - but maybe spend more time elaborating on the unintuitive code such as this, and less time explaining to people how to run "your app" in dev mode? Just a thought...

Also - AI can be good at tracking down seemingly arbitrary links such as that one. The link is to a comment written in 2021. With all the love in the world - this code was not written by someone who was actively reading issues on GitHub four years ago. I'm not sure the author of this code was on GitHub four weeks ago.

Further, you say in your post that "I could not even manage to build mac and linux versions". I'd love to hear the story about the human developer who is unable to build a client at all, but apparently finds the time to hunt down obscure Linux-exclusive transparency bugs. Why fix an asethetic issue on something not working at all? Make it make sense! Of course... AI would remember the 'good inclusion' from some other project and throw it in, because - hey, why not?



Lines 232 - 236, inclusive;

"
// Start the client.txt watcher
new ClientDotTxt(
path.join(path.normalize('/Program Files (x86)/Grinding Gear Games/Path of Exile'), 'logs', 'Client.txt'),
overlayWindow.window.webContents
)

Why are we hardcoding %programfiles(x86)%/Grinding Gear Games/Path of Exile/logs ?

Forget macOS and Linux.

That won't even work for Steam users on Windows - which is a majority of the playerbase!



Line 313.

"
process.platform === 'linux' ? 1000 : 0

?



At lines 317 to 324, inclusive. Here are the comments;

"
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.

We're apparently back to supporting macOS again, are we? I mean - I'm just judging by the actual code itself not being commented-out. And that this exists, at all.
I find it difficult to justify optional purchases to support a Tencent-owned development studio that declines to provide customers Technical Support, regardless of how many thousands of euros that customer has spent...
"
Sarno#0493 wrote:
Was this code generated by ChatGPT?


Not this file, no. Other parts of the project, yes.

The reason it is 'scatterbrained and inept' (as if I would need AI for that, it's my MO) is that I haven't worked with Electron before. A lot of the parts of this file are taken from various other projects (electron boilerplate examples, awakened trade, exilence, etc.). It took me quite a while to get it working. When I work with new tech, I do tend to comment a lot, so when I come back to the file months later, I'm not starting from 0 again.

It also means that I took best-practice code snippets for other operating systems and left them in there.

"
Sarno#0493 wrote:

Why are we hardcoding %programfiles(x86)%/Grinding Gear Games/Path of Exile/logs ?

Forget macOS and Linux.

That won't even work for Steam users on Windows - which is a majority of the playerbase!


Thanks for catching that! Will be fixed soon.
"
dupie#7991 wrote:
Maybe you could learn a thing or two at EHG with AI so that your linux client isn't terrible.

I don't work at EHG - or any other company in the games industry.

(Do they have a Linux client?)


"
dupie#7991 wrote:
You have to laugh at the condescending response you have formulated and the fact you wasted a lot of your spare time to state the obvious fact that people use AI generated code, almost as if they come built into their tooling.

Yeah, no.

It is increasingly commonplace for a developer to use AI to, say, write an initial iteration of a function that the human developer will then themselves review and amend as appropriate.

It's not at all usual to say "ChatGPT, write a program that does X" and simply deploy it to prod without a second thought. Trying to suggest otherwise is... untenable, at best.





With the exception of nitpicking over whether the abbreviated company name gets capitalised, I'm not quibbling over minor indications that AI might have been used in a modest fashion here or there.

It is bizarre that the OP suggests he / she / it / they / it's 2025 and I don't know anymore / etc. have never once got a Linux version of Bulky running... but they have somehow, for some reason, included an obscure workaround for a Linux-exclusive transparency bug.

If they can't get it to run... how do they know what it looks like on Linux?

That's not an indication of AI assistance as would be seen in, say, Webstorm. That's an indication of a wholesale "ChatGPT, write my program for me." It simply does not make sense for a human developer to be attempting to fix a bug that they themselves cannot possibly have discovered.

I'd add that 1) OP has responded to me, but not attempted to explain this at all, and, 2) they have acknowledged in their response to me that it is, apparently, the first time they have worked on Electron - which makes it even more obvious they cannot have known about the bug - much less some hack that purportedly serves as a workaround (clever, though it is).
I find it difficult to justify optional purchases to support a Tencent-owned development studio that declines to provide customers Technical Support, regardless of how many thousands of euros that customer has spent...
Last edited by Sarno#0493 on Jun 17, 2025, 10:49:49 AM
This is so annoying that kind of tools are not build in game by GGG.
"
Sarno#0493 wrote:

Yeah, no.

It is increasingly commonplace for a developer to use AI to, say, write an initial iteration of a function that the human developer will then themselves review and amend as appropriate.

It's not at all usual to say "ChatGPT, write a program that does X" and simply deploy it to prod without a second thought. Trying to suggest otherwise is... untenable, at best.


Comparing an open source "fun project" on github to deploying one to prod is laughable. Again you need to get off your high horse. This is a open source program, who knows how much experience this person has. Again all I am seeing from you is stating the obvious fact that he is using AI generated code in 2025. You clearly have some social issues or something causing this disdain for his use of AI.

If you or a company were paying for this person to write code and it was under review, sure your points are valid, but get a life and realise this is a hobby project on github as stated.



Nothing wrong with using AI to get your code working, especially if it's your own personal project.

Report Forum Post

Report Account:

Report Type

Additional Info