Skip to content

Add foundation for web interface, new setup wizard#116

Open
dammitjeff wants to merge 18 commits intoLumePart:devfrom
dammitjeff:web-interface
Open

Add foundation for web interface, new setup wizard#116
dammitjeff wants to merge 18 commits intoLumePart:devfrom
dammitjeff:web-interface

Conversation

@dammitjeff
Copy link
Copy Markdown

@dammitjeff dammitjeff commented Apr 21, 2026

Hey! Been super impressed with Explo, and noticed you really wanted to get some sort of frontend GUI for the users to interact with the app. My college background is in UX/UI Design, so I figured I could help by putting together a first pass at a lightweight web interface that sits on top of the existing config. Consider this version 1.0, but im more than happy to work with this with you! and help turn this into something that shows off your vision of explo :)

Wizard.mp4

This branch ships with a basic wizard, letting users setup their playlist/recommendation preferences, set it up with their music clients, and their download clients.

Further customization can be done in the settings, where users can access the .env file to edit, without having to manually go into a file browser and a text editor, etc.

Screenshot 2026-04-21 at 3 47 24 PM

As of now, the web interface only allows you to commit a manual run to ensure everything is working properly, with options like skip, force, etc. I've also adjusted a bit the way that the logs are shown to make it easier for users to understand what the app is doing.

Manual.Run.mp4

The backend is still running on go, with the server being run from src/web/server.go.

Also added a sample.env with all possible combinations, as we can use it as a template for users to build their wizard off of, and can edit it in the settings at any time.

As of now, I built it with just simple css + js, , but with your permission, I'd love to help move it toward React or a more full frontend stack if possible, as go isn't my main field of expertise and is built more for efficiency and not UI 😅

Full disclosure by the way, AI was used to help code up this pr, however it was only for the Go-specific parts, as I'm not too familiar with the language. But everything else was wireframed and designed 100% by a human (ME!), and looked over the code myself. Nothing here was committed blindly.

Still got some more work to do on it, cleaning up the paths, adding a few more api endpoints, making it easier to maintain for future devs, but I'd love to hear about any notes or comments you may have. I want to make this alongside you to make sure the vision you have for expo is being carried forward here. I love what you've built here, and would love to help with the UI area where possible :)

@dmandrone
Copy link
Copy Markdown

This would be sick

@martP-96
Copy link
Copy Markdown

Hell yeah this looks awesome

@burmeral
Copy link
Copy Markdown

This seems like a huge quality of life addition

@EasyCanadianGamer
Copy link
Copy Markdown

Hell yeah!!

@helpmoeny
Copy link
Copy Markdown

add this!

@nina597
Copy link
Copy Markdown

nina597 commented Apr 22, 2026

cool

@wesilly88
Copy link
Copy Markdown

This UI will definitely get a bigger fanbase to use Explo!

@oneRaspa
Copy link
Copy Markdown

Yes! Something like this would be awesome!

@EmmanuelZapata
Copy link
Copy Markdown

Please do this! Would be amazing for the project. Especially integrating it with the docker file. :)

@tidecipher
Copy link
Copy Markdown

Can't wait to try it!

@WrongerRichie
Copy link
Copy Markdown

Will be quite useful and definitely more user friendly.

… in wizard, improve download directory guidance for slskd, auto correct config path if user mounts path as a directory
@smokezr2
Copy link
Copy Markdown

Awesome idea to add a gui.

@Devansh7u
Copy link
Copy Markdown

This is what we need

@Weilers1
Copy link
Copy Markdown

Yeah I mosef need this

@Nitva
Copy link
Copy Markdown

Nitva commented Apr 22, 2026

A good improvement to this project

@JuliousFrost
Copy link
Copy Markdown

Let's go!

@FaroJoaoFaro
Copy link
Copy Markdown

Sick! Hope this goes forward!

@alepouna
Copy link
Copy Markdown

Great stuff Jeff, personally I'd also add a super small padding here as well as there is a padding on the horizontally grouped items too 👌
image

@Ludv1c0
Copy link
Copy Markdown

Ludv1c0 commented Apr 22, 2026

This should be added for real. Not having a graphic interface for this part of the app is a huge malus

@AndreJorgeLopes
Copy link
Copy Markdown

This would be sick for sure dudeee

@DimKouts84
Copy link
Copy Markdown

👍

1 similar comment
@andreabarbata
Copy link
Copy Markdown

👍

@ajuanijustus
Copy link
Copy Markdown

add this pls

@NeZios
Copy link
Copy Markdown

NeZios commented Apr 22, 2026

please add this

1 similar comment
@Linkneo5
Copy link
Copy Markdown

please add this

@RipDingers
Copy link
Copy Markdown

This would be a great addition to the project!

@ar4yn
Copy link
Copy Markdown

ar4yn commented Apr 22, 2026

This would help greatly!

@kingluc12
Copy link
Copy Markdown

Hell yeah 🤟

@tamaugo
Copy link
Copy Markdown

tamaugo commented Apr 22, 2026

this would be so cool and help me loads

@Fabicodigo
Copy link
Copy Markdown

This would be amazing to have!!

@diliboy88
Copy link
Copy Markdown

Love it DammitJeff 🥹🙏✌🏾

@SaucyLemon
Copy link
Copy Markdown

Awesome work!

@dammitjeff
Copy link
Copy Markdown
Author

dammitjeff commented Apr 22, 2026

Hey, a quick update. Added a few more things, alongside a nicer color scheme. Look familiar?
Screenshot 2026-04-22 at 3 51 01 PM

You can now configure schedules through the browser. POST /api/config/schedules builds a cron strong and wires out to the .env file , along with the corresponding playlist flag.

Clicking on the scheduled time allows you to change the exact date and time for your scheduled runs. Though In the future I'm hoping we can actually show what songs were successfully downloaded, with correct cover art, artist info, etc. And maybe down the line, add/ import our own playlists from listenbrainz ?

Screenshot 2026-04-22 at 3 36 49 PM

I've also cleaned up the style.css for now. Again, im still super limited by what I can accomplish visuals wise until I get an okay to move to a more robust stack but, should give you a good idea of whats possible here. I expect the UI to change a LOT once I get the go ahead.

isEnvLocked(key) also now checks if a user already has envs configured in their docker container across the entire wizard and settings. If they are, they are simply greyed out as to not break compatibility with older downloads.
Screenshot 2026-04-22 at 3 50 17 PM

At this point I'm ready for review, really excited to see what you think! :)

Btw!! If anyone reading would like to try it while the dev gets back to me, here are some instructions to try the branch. Would REALLY love some help getting feedback on what works/breaks at the moment! Especially with new/existing explo setups. Keep in mind this is still WIP!

Steps if you want to try it out:

  1. cd into a new empty explo config folder
  2. git clone -b web-interface https://github.com/dammitjeff/Explo.git explo-testing
  3. If you have an existing .env file, copy it over to the new explo config folder (skip if you want a fresh start)
  4. open the docker-compose.yaml file and replace:

image: ghcr.io/lumepart/explo:latest

with

build: .

And fix up any other parts of the docker-compose you might need.

  1. do docker compose up -d --build and access at http://yourip:7288

Feedback would be really appreciated! :)

@dammitjeff dammitjeff marked this pull request as ready for review April 22, 2026 23:08
@MntDew1031
Copy link
Copy Markdown

PLEASE DO THIS

@codebyant
Copy link
Copy Markdown

Man this would be sick. Please do it

@LumePart
Copy link
Copy Markdown
Owner

Thanks so much for the PR - Would love to work with you!
I will try to review and test it this weekend

By the way, the PR looked a bit sketchy at first due to the amount of reacts/comments on a fairly new request. Had to do some detective work before realizing they came from your YouTube video haha 😅

Big thanks for the shout out!!

Comment thread explo Outdated
Comment thread docker/start.sh
WEB_CFG_PATH="$WEB_CFG_PATH/.env"
echo "[setup] Config path is a directory, using $WEB_CFG_PATH"
fi
WEB_UI=true WEB_CFG_PATH="$WEB_CFG_PATH" WEB_ADDR="${WEB_ADDR:-:7288}" /opt/explo/explo &
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I love the web interface, but it might be nice to have an option to disable it if someone doesn't want / need it?

Comment thread src/web/server.go
// configFields is the single source of truth for the settings this web UI
// currently owns. VisibleWhen / RequiredWhen drive the settings UI; the wizard
// uses bespoke HTML but references the same logical rules.
var configFields = []FieldDef{
Copy link
Copy Markdown

@Nedra1998 Nedra1998 Apr 23, 2026

Choose a reason for hiding this comment

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

Just a word of warning. It seems like there is no authentication on this API (unless I am missing it in which case ignore me), and it exposes several API keys, if someone makes this publicly accessible it could be leaking some sensitive data. I'd recommend three possible suggestions:

  1. Allow for disabling the web interface and API (possibly disabled by default with an opt in?)
  2. Add authentication for API access so only the owner can read/write.
  3. Obfuscate sensitive fields (e.g. have the API return ***** instead of the actual value, so it shows there is a value but not what it is). But that doesn't solve a bad actor being able to POST to modify a users configuration.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Very good notes here yeah, as the program stands right now, there is no auth built into the app. Might be a good idea to start adding that in before a proper release!

I can do simple tweaks like obfuscating input fields, however auth is a bit out of my area of expertise. Hoping maybe LumePart or another contributor would be able to help out on that. I can handle the frontend stuff if we can get it implemented!

And yes I def agree, a toggle for a web interface would be good! Could possibly have it toggled with a docker env. I'll try and fix up a bit more when im done with work for the day. :)

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I can check out how auth could be implemented for sure

@GoboVR
Copy link
Copy Markdown

GoboVR commented Apr 24, 2026

Thanks so much for the PR - Would love to work with you!
I will try to review and test it this weekend

By the way, the PR looked a bit sketchy at first due to the amount of reacts/comments on a fairly new request. Had to do some detective work before realizing they came from your YouTube video haha 😅

Big thanks for the shout out!!

LETS go!

@LumePart
Copy link
Copy Markdown
Owner

Adding this info here as well, due to the project getting a lot of new users (and perhaps collaborators). I decided to create a discord for discussing Explo: https://discord.gg/uFWWPaN2zk

Comment thread src/web/server.go Outdated
…election

Co-authored-by: nironics <nixoxin@proton.me>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.