Skip to content

Conversation

duckaxe
Copy link
Contributor

@duckaxe duckaxe commented Aug 7, 2025

A zero-fee Bitcoin solo mining pool for umbrellOS. Run your own CKPOOL at home.

App Submission

Bassin

...

256x256 SVG icon

app-icon

...

Gallery images

gallery_1 gallery_2 gallery_3
App Screenshots

A zero-fee Bitcoin Solo Mining Pool for your Umbrel.

gallery_1

Every decentralized share counts.

gallery_2

No setup. Just point your miner to Bassin.

gallery_3

...

I have tested my app on:

  • umbrelOS on a Raspberry Pi
  • umbrelOS on an Umbrel Home
  • umbrelOS on Linux VM

Copy link
Collaborator

@al-lac al-lac left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @duckaxe,

great submission!

Would it be possible to package all of the website files (html, js, css) into a separate container instead of serving them via the static-file-server one?

Otherwise we will have a hard time with updating in case something needs to be changed.

@al-lac al-lac added the awaiting changes Waiting for contributor to make requested changes label Aug 12, 2025
@duckaxe
Copy link
Contributor Author

duckaxe commented Aug 12, 2025

@al-lac I have already tried it. It's complicated because the CKPOOL (log & json) files and front-end assets must be in the same folder (data/www) and accessible via the same web server.

I noticed that some Umbrel apps include front-end assets. That's why I did it this way. It is and will remain a single-page application. Only the JS and CSS files will change, if at all. Everything else stays the same.

This makes things much easier for me.

@duckaxe duckaxe requested a review from al-lac August 12, 2025 12:17
@al-lac
Copy link
Collaborator

al-lac commented Aug 12, 2025

Hey @duckaxe, ok got it. Lets see what @nmfretz has to say about it.

Usually it is fine to just have some simple html files in there, but once we go into javascript and other logic we have to think about what makes sense here.

@duckaxe
Copy link
Contributor Author

duckaxe commented Aug 12, 2025

Thank you for response, @al-lac
Then waiting for @nmfretz

@duckaxe
Copy link
Contributor Author

duckaxe commented Aug 13, 2025

@al-lac I found a way to extract the user interface into a docker image. It's much cleaner now ;)
I also updated the gallery images.

@al-lac
Copy link
Collaborator

al-lac commented Aug 14, 2025

Awesome work @duckaxe! 🚀

I made some adaptions to the description formatting and removed the leftover directory.

@al-lac al-lac added awaiting gallery assets Umbrel team to make gallery assets and removed awaiting changes Waiting for contributor to make requested changes labels Aug 14, 2025
@duckaxe
Copy link
Contributor Author

duckaxe commented Aug 14, 2025

@al-lac Thanks for that. You added awaiting gallery assets flag - I already provided all ready2go gallery assets. Do we need more?

@al-lac
Copy link
Collaborator

al-lac commented Aug 14, 2025

Hey @duckaxe, really great work on those assets! 🔥

I added the label as there is usually a final design check and possible adaptions before apps make it to the store.

But don't worry, does not take too long usually!

@duckaxe
Copy link
Contributor Author

duckaxe commented Aug 14, 2025

❤️

@duckaxe
Copy link
Contributor Author

duckaxe commented Sep 7, 2025

But don't worry, does not take too long usually!

Hope it happens soon.

Copy link
Collaborator

@al-lac al-lac left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @duckaxe, thanks a lot for your patience. The app store assets are now ready.

Upon reviewing the app once more together with @nmfretz we found the following topics that should be addressed before the go live:

  1. There is a race condition for chkpool as it is starting up before the init container is done creating the required folders and config files. This is not a deal breaker as chkpool retries until the files are there, but you may want to take a look at it:
bassin_ckpool_1     | [2025-10-08 12:28:14.194] Json decode error for config file /config/ckpool.conf: (-1): unable to open /config/ckpool.conf: No such file or directory
bassin_ckpool_1     | Failed to make log directory logs/
  1. It appears that any ckpool error, including cases where bitcoind isn't fully synced, results in the UI showing nothing but a pulsing loading animation.

I also suggested some changes to the tagline and description.

Once these points are cleared up, we should be able to merge.

@al-lac al-lac added awaiting changes Waiting for contributor to make requested changes and removed awaiting gallery assets Umbrel team to make gallery assets labels Oct 8, 2025
duckaxe and others added 3 commits October 11, 2025 09:43
@duckaxe
Copy link
Contributor Author

duckaxe commented Oct 11, 2025

@al-lac Thank you for your comments.

  1. My knowledge in this area is limited. Unfortunately, I have no idea how to solve this problem.
  2. The loading indicator is a kind of fallback for all cases where something goes wrong. A generic error message would not help the user. The note “Blockchain must be synchronized” is included in the app description & FAQ.

I would deploy the current version and wait for user feedback to see how many users have a problem with it.

Copy link
Collaborator

@al-lac al-lac left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @duckaxe,

About 1), the suggested changes should fix this.

For 2), fine for us!

One last thing, the app does not work on processors that do not support the AVX2 instruction set. Please look into building the container without it or maybe there is already a fix upstream.

APP_HOST: bassin_www_1
APP_PORT: 80
PROXY_AUTH_ADD: "false"
container_name: bassin_app_proxy_1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is generated automatically by umbrelOS.

Suggested change
container_name: bassin_app_proxy_1

volumes:
- ${APP_DATA_DIR}/data/config:/config:ro
- ${APP_DATA_DIR}/data/www:/www
container_name: bassin_ckpool_1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is generated automatically by umbrelOS.

Suggested change
container_name: bassin_ckpool_1

depends_on:
- ui
restart: on-failure
container_name: bassin_www_1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is generated automatically by umbrelOS.

Suggested change
container_name: bassin_www_1

entrypoint: /bin/sh -c '/opt/ckpool/src/ckpool -k -B -c /config/ckpool.conf'
user: "1000:1000"
depends_on:
- init
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sure that ckpool only gets started after init is done.

Suggested change
- init
init:
condition: service_completed_successfully

Copy link

⚠️   Linting finished with 1 warning   ⚠️

Thank you for your submission! This is an automated linter that checks for common issues in pull requests to the Umbrel App Store.

Please review the linting results below and make any necessary changes to your submission.

Linting Results

Severity File Description
ℹ️ bassin/docker-compose.yml External port mapping "3456:3333/tcp":
Port mappings may be unnecessary for the app to function correctly. Docker's internal DNS resolves container names to IP addresses within the same network. External access to the web interface is handled by the app_proxy container. Port mappings are only needed if external access is required to a port not proxied by the app_proxy, or if an app needs to expose multiple ports for its functionality (e.g., DHCP, DNS, P2P, etc.).
ℹ️ bassin/docker-compose.yml Potentially using unsafe user in service "init":
The default container user "root" can lead to security vulnerabilities. If you are using the root user, please try to specify a different user (e.g. "1000:1000") in the compose file or try to set the UID/PUID and GID/PGID environment variables to 1000.
⚠️ bassin/umbrel-app.yml "icon" and "gallery" needs to be empty for new app submissions:
The "icon" and "gallery" fields must be empty for new app submissions as it is being created by the Umbrel team.

Legend

Symbol Description
Error: This must be resolved before this PR can be merged.
⚠️ Warning: This is highly encouraged to be resolved, but is not strictly mandatory.
ℹ️ Info: This is just for your information.

@duckaxe
Copy link
Contributor Author

duckaxe commented Oct 13, 2025

@al-lac Thank you very much for improvements. I didn't remove the container_name: bassin_www_1 because the dashboard widget doesn't work after removing this line. I have adopted other suggestions.

@al-lac
Copy link
Collaborator

al-lac commented Oct 15, 2025

Hey @duckaxe, thanks a lot for making the adaptions! 👍

Really weird that it does not work without the container_name: bassin_www_1, maybe something going wrong with DNS.

Did you also check the issue with the ckpool image? Did not see a change here, so the app would still be broken on some amd64 devices.

@duckaxe
Copy link
Contributor Author

duckaxe commented Oct 15, 2025

@al-lac the ckpool image was created by using the following command where amd64 is included:
docker buildx build --platform linux/amd64,linux/arm64 -t ghcr.io/duckaxe/ckpool-solo:main --push .

https://github.com/duckaxe/ckpool-solo

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

Labels

awaiting changes Waiting for contributor to make requested changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants