🚀 Feature: App Dashboard for users #131

Closed
opened 2025-10-07 00:02:49 +03:00 by OVERLORD · 18 comments
Owner

Originally created by @shelldandy on GitHub.

Originally assigned to: @kmendell on GitHub.

Feature description

App dashboard for users to 1-click login to available apps

Pitch

We already provide the apps with nice icons and everything, so it'd be nice for users to see dashboard with them to click and login like okta/authentik

Image
Originally created by @shelldandy on GitHub. Originally assigned to: @kmendell on GitHub. ### Feature description App dashboard for users to 1-click login to available apps ### Pitch We already provide the apps with nice icons and everything, so it'd be nice for users to see dashboard with them to click and login like okta/authentik <img width="1133" height="533" alt="Image" src="https://github.com/user-attachments/assets/e937a2ed-0d8d-45e5-bff0-e49abbc4d1d7" />
Author
Owner

@kmendell commented on GitHub:

I just fixed those issues I think, If you want to pull the latest version of that image.

@kmendell commented on GitHub: I just fixed those issues I think, If you want to pull the latest version of that image.
Author
Owner

@kmendell commented on GitHub:

@shelldandy You can test it by using this image: ghcr.io/pocket-id/pocket-id:app-dash you can access it by clicking the avatar in the top left then My Apps

@kmendell commented on GitHub: @shelldandy You can test it by using this image: `ghcr.io/pocket-id/pocket-id:app-dash` you can access it by clicking the avatar in the top left then `My Apps`
Author
Owner

@shelldandy commented on GitHub:

Thanks! Just trying it out couple observations:

Image

The rendered app icons could use object-fit: contain or object-contain classname in tailwind for icons that aren't perfectly squared like the forgejo one.

Below is with object-contain class added:

Image

I set up a traefik proxy auth with * and that causes no apps to get rendered.

I fixed it by adding a launch url and also replacing the * selector with all the different options instead (which is what i should been doing anyways) and that got it working, but it'd be nice if the whole view didn't stop working altogether

@shelldandy commented on GitHub: Thanks! Just trying it out couple observations: <img width="817" height="509" alt="Image" src="https://github.com/user-attachments/assets/2f6c3ea1-b804-4655-9b7d-2736ec5ee328" /> The rendered app icons could use `object-fit: contain` or `object-contain` classname in tailwind for icons that aren't perfectly squared like the forgejo one. Below is with object-contain class added: <img width="797" height="461" alt="Image" src="https://github.com/user-attachments/assets/74590f1c-0941-4b49-a68d-dbfc899e5b52" /> I set up a traefik proxy auth with `*` and that causes no apps to get rendered. I fixed it by adding a launch url and also replacing the `*` selector with all the different options instead (which is what i should been doing anyways) and that got it working, but it'd be nice if the whole view didn't stop working altogether
Author
Owner

@shelldandy commented on GitHub:

@kmendell oh for sure that'd be great. i was gonna offer to build the feature but its nice there's something going already. lmk if i can help in that PR in any way

@shelldandy commented on GitHub: @kmendell oh for sure that'd be great. i was gonna offer to build the feature but its nice there's something going already. lmk if i can help in that PR in any way
Author
Owner

@kmendell commented on GitHub:

See PR #727 , It not ready yet however i can build a preview image if you want to test it and provide feedback

@kmendell commented on GitHub: See PR #727 , It not ready yet however i can build a preview image if you want to test it and provide feedback
Author
Owner

@shelldandy commented on GitHub:

@kmendell Thanks a lot! Just tested it out and it looks fantastic!

Not related to the PR code but would also like to point a similar image rendering issue in the OIDC Clients list

Image

I can see the images there have a min-h-8 min-w-8 classname to them but i think its probably better to do a similar approach like on the app list view of setting a fixed width and height with object-contain

@shelldandy commented on GitHub: @kmendell Thanks a lot! Just tested it out and it looks fantastic! Not related to the PR code but would also like to point a similar image rendering issue in the OIDC Clients list <img width="630" height="798" alt="Image" src="https://github.com/user-attachments/assets/d338feb0-6a2d-4e37-88b4-9055e0a541fe" /> I can see the images there have a `min-h-8 min-w-8` classname to them but i think its probably better to do a similar approach like on the app list view of setting a fixed width and height with `object-contain`
Author
Owner

@kmendell commented on GitHub:

@shelldandy Can you try ghcr.io/pocket-id/pocket-id:next in like 5 minutes once its done building to see if that fixed as well?

@kmendell commented on GitHub: @shelldandy Can you try `ghcr.io/pocket-id/pocket-id:next` in like 5 minutes once its done building to see if that fixed as well?
Author
Owner

@coding-blip commented on GitHub:

Not the original poster, but the dashboard is something I have been interested in since setting up Pocket ID a few weeks back. Is it going to be possible to have the "My Apps" page be the initial landing page on login?

Also along the same line of thinking, could we then also have the account settings and whatnot either be a tab or hidden behind the profile icon? Thinking something like Okta where an end user logs in and is presented with all their available apps right away and then all the settings are tucked away. The warning about no passkeys or a single passkey could also still be presented on the app dashboard page as well with a link to the settings page to set one (or an additional one) up.

I switched my install to use to the app-dash tag and didn't see a way to do this currently, so figured I'd bring it up. Maybe it could be some kind of flag or option in the UI to choose the initial landing page with different options for whether someone is an end-user or an admin?

Also, just a tiny bit of personal feedback, on the "My Apps" page, having the Applications you have access to text doesn't really add anything of importance since the "My Apps" heading already implies that. Just my personal opinion though and it doesn't matter to me much either way.

Regardless, thanks for all the hard work on this awesome app. I am loving that an app dashboard is in the works!

@coding-blip commented on GitHub: Not the original poster, but the dashboard is something I have been interested in since setting up Pocket ID a few weeks back. Is it going to be possible to have the "My Apps" page be the initial landing page on login? Also along the same line of thinking, could we then also have the account settings and whatnot either be a tab or hidden behind the profile icon? Thinking something like Okta where an end user logs in and is presented with all their available apps right away and then all the settings are tucked away. The warning about no passkeys or a single passkey could also still be presented on the app dashboard page as well with a link to the settings page to set one (or an additional one) up. I switched my install to use to the `app-dash` tag and didn't see a way to do this currently, so figured I'd bring it up. Maybe it could be some kind of flag or option in the UI to choose the initial landing page with different options for whether someone is an end-user or an admin? Also, just a tiny bit of personal feedback, on the "My Apps" page, having the `Applications you have access to` text doesn't really add anything of importance since the "My Apps" heading already implies that. Just my personal opinion though and it doesn't matter to me much either way. Regardless, thanks for all the hard work on this awesome app. I am loving that an app dashboard is in the works!
Author
Owner

@shelldandy commented on GitHub:

It doesn't work for me, im getting this:

❯ dc logs -f
pocketid  | Creating group 1000...
pocketid  | Creating user 1000...
pocketid  | 2025/07/12 04:08:46 failed to run migrations: failed to apply migrations: no migration found for version 20250709213113: read down for version 20250709213113 migrations/sqlite: file does not exist

And can't really work from there, so im back to the app-dash tag

@shelldandy commented on GitHub: It doesn't work for me, im getting this: ``` ❯ dc logs -f pocketid | Creating group 1000... pocketid | Creating user 1000... pocketid | 2025/07/12 04:08:46 failed to run migrations: failed to apply migrations: no migration found for version 20250709213113: read down for version 20250709213113 migrations/sqlite: file does not exist ``` And can't really work from there, so im back to the app-dash tag
Author
Owner

@kmendell commented on GitHub:

i forgot theres a migration, i just merged it into the app dash branch , see if that works for you. It should be built in a couple minutes.

@kmendell commented on GitHub: i forgot theres a migration, i just merged it into the app dash branch , see if that works for you. It should be built in a couple minutes.
Author
Owner

@kmendell commented on GitHub:

Not the original poster, but the dashboard is something I have been interested in since setting up Pocket ID a few weeks back. Is it going to be possible to have the "My Apps" page be the initial landing page on login?

Also along the same line of thinking, could we then also have the account settings and whatnot either be a tab or hidden behind the profile icon? Thinking something like Okta where an end user logs in and is presented with all their available apps right away and then all the settings are tucked away. The warning about no passkeys or a single passkey could also still be presented on the app dashboard page as well with a link to the settings page to set one (or an additional one) up.

I switched my install to use to the app-dash tag and didn't see a way to do this currently, so figured I'd bring it up. Maybe it could be some kind of flag or option in the UI to choose the initial landing page with different options for whether someone is an end-user or an admin?

Also, just a tiny bit of personal feedback, on the "My Apps" page, having the Applications you have access to text doesn't really add anything of importance since the "My Apps" heading already implies that. Just my personal opinion though and it doesn't matter to me much either way.

Regardless, thanks for all the hard work on this awesome app. I am loving that an app dashboard is in the works!

I was toying with the idea of the My account page , but talking with elias, we want to keep that as the main page i think due to the user being locked out if they dont add a passkey, but once he gets back from vacation we can look into it more :). Ill remove the extra text too as it is a bit redundant.

@kmendell commented on GitHub: > Not the original poster, but the dashboard is something I have been interested in since setting up Pocket ID a few weeks back. Is it going to be possible to have the "My Apps" page be the initial landing page on login? > > Also along the same line of thinking, could we then also have the account settings and whatnot either be a tab or hidden behind the profile icon? Thinking something like Okta where an end user logs in and is presented with all their available apps right away and then all the settings are tucked away. The warning about no passkeys or a single passkey could also still be presented on the app dashboard page as well with a link to the settings page to set one (or an additional one) up. > > I switched my install to use to the `app-dash` tag and didn't see a way to do this currently, so figured I'd bring it up. Maybe it could be some kind of flag or option in the UI to choose the initial landing page with different options for whether someone is an end-user or an admin? > > Also, just a tiny bit of personal feedback, on the "My Apps" page, having the `Applications you have access to` text doesn't really add anything of importance since the "My Apps" heading already implies that. Just my personal opinion though and it doesn't matter to me much either way. > > Regardless, thanks for all the hard work on this awesome app. I am loving that an app dashboard is in the works! I was toying with the idea of the My account page , but talking with elias, we want to keep that as the main page i think due to the user being locked out if they dont add a passkey, but once he gets back from vacation we can look into it more :). Ill remove the extra text too as it is a bit redundant.
Author
Owner

@shelldandy commented on GitHub:

i forgot theres a migration, i just merged it into the app dash branch , see if that works for you. It should be built in a couple minutes.

@kmendell sorry i didn't see your newer replies. just tried again but again i got the same migration error :/

@shelldandy commented on GitHub: > i forgot theres a migration, i just merged it into the app dash branch , see if that works for you. It should be built in a couple minutes. @kmendell sorry i didn't see your newer replies. just tried again but again i got the same migration error :/
Author
Owner

@coding-blip commented on GitHub:

I also tried to go back into the main v1 tag and am getting migration errors that @shelldandy is seeing as well. Also tried specifically going back to the previous version I was on as well which, I believe, was v1.6.2 and got the same error.

failed to run migrations: failed to apply migrations: no migration found for version 20250709213113: read down for version 20250709213113 migrations/sqlite: file does not exist
@coding-blip commented on GitHub: I also tried to go back into the main `v1` tag and am getting migration errors that @shelldandy is seeing as well. Also tried specifically going back to the previous version I was on as well which, I believe, was `v1.6.2` and got the same error. ``` failed to run migrations: failed to apply migrations: no migration found for version 20250709213113: read down for version 20250709213113 migrations/sqlite: file does not exist ```
Author
Owner

@kmendell commented on GitHub:

You would have to manually remove the migration, the clean way would be similar to below:

sqlite3 pocket-id.db
.read /path/to/your/20250709213113_oidc_client_launch_url.down.sql

you would have to get the sql migration down file from here: https://github.com/pocket-id/pocket-id/blob/feat/simple-dashboard/backend/resources/migrations/sqlite/20250709213113_oidc_client_launch_url.down.sql

Postgres is similar as well.

The non-clean way is just to edit the migration_schema table value to be the last migration before the launch url one. but then the tables still exist unless you manually delete them.

@kmendell commented on GitHub: You would have to manually remove the migration, the clean way would be similar to below: `sqlite3 pocket-id.db` `.read /path/to/your/20250709213113_oidc_client_launch_url.down.sql` you would have to get the sql migration down file from here: https://github.com/pocket-id/pocket-id/blob/feat/simple-dashboard/backend/resources/migrations/sqlite/20250709213113_oidc_client_launch_url.down.sql Postgres is similar as well. The non-clean way is just to edit the migration_schema table value to be the last migration before the launch url one. but then the tables still exist unless you manually delete them.
Author
Owner

@coding-blip commented on GitHub:

Cool sounds good! I understand keeping it that way for sure, especially since it's already in place.

Maybe in the future it can be a toggle and as I mentioned the warning about no passkeys or single passkey could also be presented on the dashboard for visibility if someone were to have the app dashboard be their initial page on login. Could be the best of both worlds! Either way, thanks again!

@coding-blip commented on GitHub: Cool sounds good! I understand keeping it that way for sure, especially since it's already in place. Maybe in the future it can be a toggle and as I mentioned the warning about no passkeys or single passkey could also be presented on the dashboard for visibility if someone were to have the app dashboard be their initial page on login. Could be the best of both worlds! Either way, thanks again!
Author
Owner

@coding-blip commented on GitHub:

If anyone else is in the same predicament as myself, here are the steps I took to fix it.

I couldn't get the 20250709213113_oidc_client_launch_url.down.sql file method to work, but I don't know a whole lot about the inner working of DBs, so not surprising. I got sqlite3 installed and was able to run it on the DB along with the .read command, but when I started the container back up, it still complained about the missing migration file when I went back to v1.6.2.

I ended up making a backup copy of my pocket id DB and then using "DB Browser for SQLite" to connect to the main DB. Once connected, I browsed the schema_migrations table as you mentioned and set the version to 20250630000000 which was the last migration present for v1.6.2. After applying this and writing the change to the DB, and then closing the DB, I was able to run pocket-id v1.6.2 again. I then checked the simple-dashboard branch to find what the .down.sql migration was doing, which was the following: ALTER TABLE oidc_clients DROP COLUMN launch_url;.

So I connected to the DB again with DB Browser and checked for the launch_url column on the oidc_clients table and saw it was not there, so I guess the .read 20250709213113_oidc_client_launch_url.down.sql still cleaned it up, so I think my DB should be back to normal.

After all this I was also able to upgrade to v1.6.4 (latest version as of posting this) without any issues. Thanks for the tips @kmendell!

@coding-blip commented on GitHub: If anyone else is in the same predicament as myself, here are the steps I took to fix it. I couldn't get the `20250709213113_oidc_client_launch_url.down.sql` file method to work, but I don't know a whole lot about the inner working of DBs, so not surprising. I got sqlite3 installed and was able to run it on the DB along with the .read command, but when I started the container back up, it still complained about the missing migration file when I went back to v1.6.2. I ended up making a backup copy of my pocket id DB and then using "DB Browser for SQLite" to connect to the main DB. Once connected, I browsed the `schema_migrations` table as you mentioned and set the version to `20250630000000` which was the last migration present for v1.6.2. After applying this and writing the change to the DB, and then closing the DB, I was able to run pocket-id v1.6.2 again. I then checked the simple-dashboard branch to find what the .down.sql migration was doing, which was the following: `ALTER TABLE oidc_clients DROP COLUMN launch_url;`. So I connected to the DB again with DB Browser and checked for the `launch_url` column on the `oidc_clients` table and saw it was not there, so I guess the `.read 20250709213113_oidc_client_launch_url.down.sql` still cleaned it up, so I think my DB should be back to normal. After all this I was also able to upgrade to v1.6.4 (latest version as of posting this) without any issues. Thanks for the tips @kmendell!
Author
Owner

@shelldandy commented on GitHub:

You would have to manually remove the migration, the clean way would be similar to below:

sqlite3 pocket-id.db .read /path/to/your/20250709213113_oidc_client_launch_url.down.sql

you would have to get the sql migration down file from here: https://github.com/pocket-id/pocket-id/blob/feat/simple-dashboard/backend/resources/migrations/sqlite/20250709213113_oidc_client_launch_url.down.sql

Postgres is similar as well.

The non-clean way is just to edit the migration_schema table value to be the last migration before the launch url one. but then the tables still exist unless you manually delete them.

The reference down command is no longer available since the branch was deleted :(

@shelldandy commented on GitHub: > You would have to manually remove the migration, the clean way would be similar to below: > > `sqlite3 pocket-id.db` `.read /path/to/your/20250709213113_oidc_client_launch_url.down.sql` > > you would have to get the sql migration down file from here: https://github.com/pocket-id/pocket-id/blob/feat/simple-dashboard/backend/resources/migrations/sqlite/20250709213113_oidc_client_launch_url.down.sql > > Postgres is similar as well. > > The non-clean way is just to edit the migration_schema table value to be the last migration before the launch url one. but then the tables still exist unless you manually delete them. The reference down command is no longer available since the branch was deleted :(
Author
Owner

@shelldandy commented on GitHub:

I got it working!

First i had to run:

ALTER TABLE oidc_clients DROP COLUMN launch_url;

Which i got from here

Then I ran:

UPDATE schema_migrations SET "version"= 20250630000000, dirty=false

Which i found here

After that I got it working

@shelldandy commented on GitHub: I got it working! First i had to run: ``` ALTER TABLE oidc_clients DROP COLUMN launch_url; ``` Which i got from [here](https://github.com/pocket-id/pocket-id/pull/727/commits/3c3b174b7da3fa5a82935b561acf62e75599b348#diff-d601373130b6f379aaa2291a664a5c1222856a6c58b0622315ebbf98cfa4dadf) Then I ran: ``` UPDATE schema_migrations SET "version"= 20250630000000, dirty=false ``` Which i found [here](https://github.com/pocket-id/pocket-id/issues/761#issuecomment-3095294685) After that I got it working
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/pocket-id#131