diff --git a/frontend/src/views/RequestAccessView.vue b/frontend/src/views/RequestAccessView.vue
index 453e452..8a8df12 100644
--- a/frontend/src/views/RequestAccessView.vue
+++ b/frontend/src/views/RequestAccessView.vue
@@ -148,8 +148,9 @@
Verifying email…
-
- {{ verifyMessage }}
+
+
{{ verifyBanner.title }}
+
{{ verifyBanner.body }}
@@ -273,7 +274,7 @@ const retrying = ref(false);
const retryMessage = ref("");
const resending = ref(false);
const resendMessage = ref("");
-const verifyMessage = ref("");
+const verifyBanner = ref(null);
function taskPillClass(status) {
const key = (status || "").trim();
@@ -454,7 +455,7 @@ async function copyRequestCode() {
async function checkStatus() {
if (checking.value) return;
error.value = "";
- verifyMessage.value = "";
+ verifyBanner.value = null;
const trimmed = statusForm.request_code.trim();
if (!trimmed) return;
if (!trimmed.includes("~")) {
@@ -479,8 +480,13 @@ async function checkStatus() {
onboardingUrl.value = data.onboarding_url || "";
tasks.value = Array.isArray(data.tasks) ? data.tasks : [];
blocked.value = Boolean(data.blocked);
- if (data.email_verified) {
- verifyMessage.value = "Email confirmed.";
+ if (data.email_verified && status.value === "pending") {
+ verifyBanner.value = {
+ title: "Email confirmed",
+ body: "Your request is now waiting for manual approval. Check back here after an admin reviews it.",
+ };
+ } else {
+ verifyBanner.value = null;
}
} catch (err) {
error.value = err.message || "Failed to check status";
@@ -533,7 +539,14 @@ async function verifyFromLink(code, token) {
const data = await resp.json().catch(() => ({}));
if (!resp.ok) throw new Error(data.error || resp.statusText || `status ${resp.status}`);
status.value = data.status || status.value;
- verifyMessage.value = "Email confirmed.";
+ if (status.value === "pending") {
+ verifyBanner.value = {
+ title: "Email confirmed",
+ body: "Your request is now waiting for manual approval. Check back here after an admin reviews it.",
+ };
+ } else {
+ verifyBanner.value = null;
+ }
} finally {
verifying.value = false;
}
@@ -582,8 +595,11 @@ onMounted(async () => {
if (code) {
await checkStatus();
}
- if (verified) {
- verifyMessage.value = "Email confirmed.";
+ if (verified && status.value === "pending") {
+ verifyBanner.value = {
+ title: "Email confirmed",
+ body: "Your request is now waiting for manual approval. Check back here after an admin reviews it.",
+ };
}
if (verifyError) {
error.value = `Email verification failed: ${decodeURIComponent(verifyError)}`;
@@ -794,6 +810,28 @@ button.primary:disabled {