refine onboarding steps and app layout

This commit is contained in:
Brad Stein 2026-01-06 13:55:24 -03:00
parent 781d481fb5
commit dd9ebd2afc
5 changed files with 50 additions and 12 deletions

View File

@ -59,6 +59,7 @@ def _verify_url(request_code: str, token: str) -> str:
ONBOARDING_STEPS: tuple[str, ...] = ( ONBOARDING_STEPS: tuple[str, ...] = (
"vaultwarden_master_password", "vaultwarden_master_password",
"vaultwarden_browser_extension", "vaultwarden_browser_extension",
"vaultwarden_desktop_app",
"vaultwarden_mobile_app", "vaultwarden_mobile_app",
"keycloak_password_rotated", "keycloak_password_rotated",
"keycloak_mfa_optional", "keycloak_mfa_optional",

View File

@ -549,7 +549,7 @@ async function copy(key, text) {
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
justify-content: flex-end; justify-content: flex-end;
gap: 24px; gap: 28px;
} }
.divider { .divider {
@ -591,15 +591,16 @@ h1 {
} }
.account-stack { .account-stack {
display: flex; display: grid;
flex-direction: column; grid-template-rows: repeat(2, minmax(0, 1fr));
gap: 12px; gap: 12px;
height: 100%; height: 100%;
} }
.account-stack .module { .account-stack .module {
flex: 1 1 0;
min-height: 0; min-height: 0;
display: flex;
flex-direction: column;
} }
.module { .module {
@ -702,7 +703,7 @@ button.primary {
} }
.jellyfin-detail { .jellyfin-detail {
margin-top: 12px; margin-top: auto;
} }
.copy { .copy {

View File

@ -194,6 +194,8 @@ const sections = [
.category { .category {
padding: 18px; padding: 18px;
display: flex;
flex-direction: column;
} }
.section-head { .section-head {
@ -202,8 +204,7 @@ const sections = [
justify-content: space-between; justify-content: space-between;
gap: 18px; gap: 18px;
margin-bottom: 14px; margin-bottom: 14px;
height: 92px; min-height: 92px;
overflow: hidden;
} }
.group + .group { .group + .group {
@ -228,10 +229,16 @@ const sections = [
.tiles { .tiles {
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); grid-template-columns: 1fr;
gap: 12px; gap: 12px;
} }
@media (min-width: 680px) {
.tiles {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
.tile { .tile {
display: block; display: block;
text-decoration: none; text-decoration: none;

View File

@ -166,6 +166,25 @@
</p> </p>
</li> </li>
<li class="check-item" :class="checkItemClass('vaultwarden_desktop_app')">
<label>
<input
type="checkbox"
:checked="isStepDone('vaultwarden_desktop_app')"
:disabled="!auth.authenticated || loading || isStepBlocked('vaultwarden_desktop_app')"
@change="toggleStep('vaultwarden_desktop_app', $event)"
/>
<span>Install the Vaultwarden desktop app</span>
<span class="pill mono auto-pill" :class="stepPillClass('vaultwarden_desktop_app')">
{{ stepPillLabel("vaultwarden_desktop_app") }}
</span>
</label>
<p class="muted">
Install the Bitwarden desktop app and set the server to vault.bstein.dev (Settings Account Environment Self-hosted).
<a href="https://bitwarden.com/download" target="_blank" rel="noreferrer">Bitwarden downloads</a>.
</p>
</li>
<li class="check-item" :class="checkItemClass('vaultwarden_mobile_app')"> <li class="check-item" :class="checkItemClass('vaultwarden_mobile_app')">
<label> <label>
<input <input
@ -208,7 +227,14 @@
> >
Enable rotation Enable rotation
</button> </button>
<a class="mono" href="https://sso.bstein.dev/realms/atlas/account" target="_blank" rel="noreferrer">Open Keycloak</a> <a
class="mono"
href="https://sso.bstein.dev/realms/atlas/account/#/security/signing-in"
target="_blank"
rel="noreferrer"
>
Open Keycloak
</a>
</div> </div>
<p class="muted"> <p class="muted">
After Vaultwarden is set up, rotate your Keycloak password to a strong one and store it in Vaultwarden. After Vaultwarden is set up, rotate your Keycloak password to a strong one and store it in Vaultwarden.
@ -399,7 +425,8 @@ const extraSteps = [
{ {
id: "elementx_setup", id: "elementx_setup",
title: "Install Element X and sign in", title: "Install Element X and sign in",
description: "Install Element X on mobile and sign in with your Atlas username/password to join rooms and calls.", description:
"Install Element X on mobile and sign in with your Atlas username/password. Use Element Web → Settings → Sessions to connect your phone via QR.",
primaryLink: { href: "https://live.bstein.dev", text: "Element" }, primaryLink: { href: "https://live.bstein.dev", text: "Element" },
}, },
{ {
@ -412,7 +439,7 @@ const extraSteps = [
id: "mail_client_setup", id: "mail_client_setup",
title: "Set up mail on a device", title: "Set up mail on a device",
description: description:
"Use the IMAP/SMTP details on your Account page to add mail to your phone or desktop client (FairEmail, Thunderbird, Apple Mail, Outlook, etc).", "Use the IMAP/SMTP details on your Account page to add mail to your phone or desktop client (FairEmail on Android, Apple Mail on iOS, Thunderbird on desktop).",
primaryLink: { href: "/account", text: "Account" }, primaryLink: { href: "/account", text: "Account" },
}, },
]; ];
@ -451,6 +478,7 @@ function requiredStepOrder() {
return [ return [
"vaultwarden_master_password", "vaultwarden_master_password",
"vaultwarden_browser_extension", "vaultwarden_browser_extension",
"vaultwarden_desktop_app",
"vaultwarden_mobile_app", "vaultwarden_mobile_app",
"keycloak_password_rotated", "keycloak_password_rotated",
"element_recovery_key", "element_recovery_key",

View File

@ -72,7 +72,8 @@
<div v-else class="success-box"> <div v-else class="success-box">
<div class="mono">Request submitted.</div> <div class="mono">Request submitted.</div>
<div class="muted"> <div class="muted">
Save this request code. Check your email for a verification link, then use the code to track status. Save this request code. Check your email for a verification link, then use the code to track status. Once approved,
your status will provide an onboarding link to finish account setup.
</div> </div>
<div class="request-code-row"> <div class="request-code-row">
<span class="label mono">Request Code</span> <span class="label mono">Request Code</span>