diff --git a/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte b/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte
index 5cc9a707..818420cb 100644
--- a/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte
+++ b/infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte
@@ -55,7 +55,7 @@
return null;
});
- if (permissions === "prompt") {
+ if (permissions === "prompt" || permissions === "denied") {
permissions = await requestPermissions();
}
@@ -340,7 +340,6 @@
? "Vote signed successfully!"
: "Message signed successfully!",
);
-
// Check if this was from a deep link
const deepLinkData = sessionStorage.getItem("deepLinkData");
if (deepLinkData) {
diff --git a/platforms/blabsy/src/components/login/login-main.tsx b/platforms/blabsy/src/components/login/login-main.tsx
index 433bebbe..98425086 100644
--- a/platforms/blabsy/src/components/login/login-main.tsx
+++ b/platforms/blabsy/src/components/login/login-main.tsx
@@ -41,6 +41,16 @@ export function LoginMain(): JSX.Element {
new URL(data.uri).searchParams.get('session') as string
);
};
+ const getAppStoreLink = () => {
+ const userAgent = navigator.userAgent || navigator.vendor || window.opera;
+ if (/android/i.test(userAgent)) {
+ return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
+ }
+ if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
+ return "https://apps.apple.com/in/app/eid-for-w3ds/id6747748667"
+ }
+ return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
+ };
useEffect(() => {
getOfferData()
@@ -77,20 +87,39 @@ export function LoginMain(): JSX.Element {
{isMobileDevice() ? (
+
+ Click the button to open your
eID App to login
+
Login with eID Wallet
-
- Click the button to open your eID wallet app
-
+
+
+ The button is valid for 60 seconds
+ Please refresh the page if it expires
+
+
) : (
+
+
+ Scan the QR code using your eID App to login
+
{qr && }
+
+
+ The code is valid for 60 seconds
+ Please refresh the page if it expires
+
+
+
)}
@@ -110,12 +139,14 @@ export function LoginMain(): JSX.Element {
separation, where all your personal content is stored in
your own sovereign eVault, not on centralised servers.
+
+
diff --git a/platforms/eVoting/src/app/(auth)/login/page.tsx b/platforms/eVoting/src/app/(auth)/login/page.tsx
index 8f4ec801..f7187742 100644
--- a/platforms/eVoting/src/app/(auth)/login/page.tsx
+++ b/platforms/eVoting/src/app/(auth)/login/page.tsx
@@ -66,6 +66,17 @@ export default function LoginPage() {
return () => eventSource.close();
}, [sessionId, login]);
+ const getAppStoreLink = () => {
+ const userAgent = navigator.userAgent || navigator.vendor || window.opera;
+ if (/android/i.test(userAgent)) {
+ return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
+ }
+ if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
+ return "https://apps.apple.com/in/app/eid-for-w3ds/id6747748667"
+ }
+ return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
+ };
+
return (
{/* Logo + Tagline */}
@@ -89,13 +100,13 @@ export default function LoginPage() {
{isMobile ? (
<>
Click the button below using your
-
eID App
+
eID App
to login
>
) : (
<>
Scan the QR using your
-
eID App
+
eID App
to login
>
)}
@@ -156,8 +167,9 @@ export default function LoginPage() {
-
+
+
);
}
diff --git a/platforms/group-charter-manager/next.config.ts b/platforms/group-charter-manager/next.config.ts
index e9ffa308..c32f48d1 100644
--- a/platforms/group-charter-manager/next.config.ts
+++ b/platforms/group-charter-manager/next.config.ts
@@ -1,7 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
- /* config options here */
+ /* config options here */
};
export default nextConfig;
diff --git a/platforms/group-charter-manager/package.json b/platforms/group-charter-manager/package.json
index 62779faa..55b37ef0 100644
--- a/platforms/group-charter-manager/package.json
+++ b/platforms/group-charter-manager/package.json
@@ -15,6 +15,7 @@
"@milkdown/preset-gfm": "^7.15.2",
"@milkdown/react": "^7.15.2",
"@milkdown/theme-nord": "^7.15.2",
+ "@next/env": "^15.4.7",
"@radix-ui/react-alert-dialog": "^1.1.7",
"@radix-ui/react-dialog": "^1.1.7",
"@radix-ui/react-dropdown-menu": "^2.1.7",
@@ -29,35 +30,35 @@
"@tiptap/starter-kit": "^2.24.0",
"@toast-ui/react-editor": "^3.2.3",
"axios": "^1.6.7",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
"cmdk": "^1.1.1",
"draft-js": "^0.11.7",
"lucide-react": "^0.453.0",
"marked": "^16.1.1",
+ "next": "15.4.2",
"qrcode.react": "^4.2.0",
+ "react": "19.1.0",
+ "react-dom": "19.1.0",
"react-draft-wysiwyg": "^1.15.0",
+ "react-hook-form": "^7.55.0",
"react-markdown": "^10.1.0",
"react-markdown-editor-lite": "^1.3.4",
"react-quill": "^2.0.0",
"remark-gfm": "^4.0.1",
- "turndown": "^7.2.0",
- "class-variance-authority": "^0.7.1",
- "clsx": "^2.1.1",
- "next": "15.4.2",
- "react": "19.1.0",
- "react-dom": "19.1.0",
- "react-hook-form": "^7.55.0",
"tailwind-merge": "^3.3.1",
"tailwindcss-animate": "^1.0.7",
+ "turndown": "^7.2.0",
"zod": "^3.24.2"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4.1.11",
"@types/draft-js": "^0.11.18",
- "@types/turndown": "^5.0.5",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
+ "@types/turndown": "^5.0.5",
"eslint": "^9",
"eslint-config-next": "15.4.2",
"tailwindcss": "^4.1.11",
diff --git a/platforms/group-charter-manager/src/components/auth/login-screen.tsx b/platforms/group-charter-manager/src/components/auth/login-screen.tsx
index 94d3a4bf..007d2001 100644
--- a/platforms/group-charter-manager/src/components/auth/login-screen.tsx
+++ b/platforms/group-charter-manager/src/components/auth/login-screen.tsx
@@ -70,10 +70,21 @@ export default function LoginScreen() {
};
};
+ const getAppStoreLink = () => {
+ const userAgent = navigator.userAgent || navigator.vendor || window.opera;
+ if (/android/i.test(userAgent)) {
+ return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
+ }
+ if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
+ return "https://apps.apple.com/in/app/eid-for-w3ds/id6747748667"
+ }
+ return "https://play.google.com/store/apps/details?id=foundation.metastate.eid_wallet";
+ };
+
if (isLoading) {
return (
);
}
@@ -101,15 +112,15 @@ export default function LoginScreen() {
/>
Group Charter
-
+
Coordinate your group in the MetaState
-
+
- Scan the QR code to login with your W3DS identity
+ Scan the QR code using your eID App to login
@@ -142,7 +153,9 @@ export default function LoginScreen() {
- Use your W3DS wallet to scan this QR code and authenticate
+ The {isMobileDevice() ? "button": "code"} is valid for 60 seconds
+ Please refresh the page if it expires
@@ -155,13 +168,15 @@ export default function LoginScreen() {
servers.
-
+
+
+
);
diff --git a/platforms/pictique/package.json b/platforms/pictique/package.json
index 69877e8d..48a2f1d5 100644
--- a/platforms/pictique/package.json
+++ b/platforms/pictique/package.json
@@ -4,7 +4,7 @@
"version": "0.0.1",
"type": "module",
"scripts": {
- "dev": "vite dev",
+ "dev": "vite dev --host",
"build": "vite build",
"preview": "vite preview",
"prepare": "svelte-kit sync || echo ''",
diff --git a/platforms/pictique/src/routes/(auth)/auth/+page.svelte b/platforms/pictique/src/routes/(auth)/auth/+page.svelte
index 89f6784b..35380007 100644
--- a/platforms/pictique/src/routes/(auth)/auth/+page.svelte
+++ b/platforms/pictique/src/routes/(auth)/auth/+page.svelte
@@ -1,13 +1,17 @@