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.
+ W3DS logo + 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() {
- + w3ds Logo + ); } 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.
- W3DS Logo + + W3DS Logo + ); 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 @@