From f093fa200125510ea607a45ff35914c0e6fbbf3d Mon Sep 17 00:00:00 2001 From: Mateo Sauton <39073982+mateosauton@users.noreply.github.com> Date: Sat, 7 Feb 2026 20:01:52 -0700 Subject: [PATCH 01/15] Initial commit --- .codex/skills/interface-design/SKILL.md | 172 + .../interface-design/rules/alertdialog.md | 100 + .../rules/best-practices-accessibility.md | 32 + .../rules/best-practices-components.md | 30 + .../rules/best-practices-forms.md | 43 + .../rules/best-practices-i18n.md | 28 + .../rules/best-practices-mobile.md | 36 + .../rules/best-practices-performance.md | 33 + .../rules/best-practices-state.md | 33 + .../rules/best-practices-typography.md | 37 + .../rules/best-practices-validation.md | 34 + .../interface-design/rules/bottombar.md | 48 + .../interface-design/rules/bulletlist.md | 88 + .../skills/interface-design/rules/button.md | 53 + .codex/skills/interface-design/rules/chip.md | 54 + .../interface-design/rules/circularicon.md | 42 + .../interface-design/rules/circularstate.md | 41 + .../interface-design/rules/colorpicker.md | 43 + .../interface-design/rules/countrydrawer.md | 65 + .../skills/interface-design/rules/drawer.md | 82 + .codex/skills/interface-design/rules/flag.md | 38 + .../interface-design/rules/form-checkbox.md | 35 + .../interface-design/rules/form-input.md | 58 + .../interface-design/rules/form-otpfield.md | 43 + .../rules/form-passwordfield.md | 29 + .../interface-design/rules/form-phonefield.md | 61 + .../interface-design/rules/form-radiogroup.md | 51 + .../rules/form-searchfield.md | 45 + .../interface-design/rules/form-select.md | 74 + .../interface-design/rules/form-switch.md | 34 + .../interface-design/rules/form-textarea.md | 46 + .../interface-design/rules/form-utilities.md | 78 + .../rules/form-walletaddressfield.md | 44 + .../skills/interface-design/rules/haptic.md | 43 + .codex/skills/interface-design/rules/i18n.md | 48 + .../skills/interface-design/rules/listitem.md | 58 + .../interface-design/rules/livefeedback.md | 52 + .../skills/interface-design/rules/marble.md | 41 + .../interface-design/rules/numberpad.md | 53 + .codex/skills/interface-design/rules/pill.md | 32 + .../skills/interface-design/rules/progress.md | 35 + .../interface-design/rules/safeareaview.md | 38 + .../skills/interface-design/rules/skeleton.md | 48 + .codex/skills/interface-design/rules/tabs.md | 72 + .codex/skills/interface-design/rules/toast.md | 66 + .../interface-design/rules/togglegroup.md | 64 + .codex/skills/interface-design/rules/token.md | 42 + .../skills/interface-design/rules/topbar.md | 60 + .../interface-design/rules/typography.md | 119 + .../rules/verificationbadge.md | 35 + .../vercel-react-best-practices/AGENTS.md | 2197 +++++ .../vercel-react-best-practices/SKILL.md | 127 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-use-latest.md | 49 + .../rules/async-api-routes.md | 35 + .../rules/async-defer-await.md | 80 + .../rules/async-dependencies.md | 37 + .../rules/async-parallel.md | 24 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-barrel-imports.md | 59 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 48 + .../rules/bundle-dynamic-imports.md | 34 + .../rules/bundle-preload.md | 44 + .../rules/client-event-listeners.md | 78 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 78 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 68 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 50 + .../rules/js-min-max-loop.md | 82 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 38 + .../rules/rendering-conditional-render.md | 32 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 36 + .../rules/rendering-hydration-no-flicker.md | 72 + .../rules/rendering-svg-precision.md | 28 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 77 + .../rules/rerender-lazy-state-init.md | 56 + .../rules/rerender-memo.md | 44 + .../rules/rerender-transitions.md | 40 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 26 + .../rules/server-parallel-fetching.md | 79 + .../rules/server-serialization.md | 38 + .codex/skills/web-design-guidelines/SKILL.md | 40 + .codex/skills/world-id-sdk/SKILL.md | 235 + .../rules/best-practices-error-handling.md | 139 + .../rules/best-practices-security.md | 114 + .../skills/world-id-sdk/rules/command-chat.md | 165 + .../rules/command-get-permissions.md | 131 + .../world-id-sdk/rules/command-haptics.md | 145 + .../skills/world-id-sdk/rules/command-pay.md | 184 + .../rules/command-request-permission.md | 144 + .../rules/command-send-notifications.md | 147 + .../rules/command-send-transaction.md | 156 + .../rules/command-share-contacts.md | 131 + .../world-id-sdk/rules/command-share.md | 160 + .../rules/command-sign-message.md | 157 + .../rules/command-sign-typed-data.md | 184 + .../world-id-sdk/rules/command-verify.md | 195 + .../world-id-sdk/rules/command-wallet-auth.md | 187 + .../world-id-sdk/rules/initialization.md | 89 + .cursor/skills/interface-design/SKILL.md | 172 + .../interface-design/rules/alertdialog.md | 100 + .../rules/best-practices-accessibility.md | 32 + .../rules/best-practices-components.md | 30 + .../rules/best-practices-forms.md | 43 + .../rules/best-practices-i18n.md | 28 + .../rules/best-practices-mobile.md | 36 + .../rules/best-practices-performance.md | 33 + .../rules/best-practices-state.md | 33 + .../rules/best-practices-typography.md | 37 + .../rules/best-practices-validation.md | 34 + .../interface-design/rules/bottombar.md | 48 + .../interface-design/rules/bulletlist.md | 88 + .../skills/interface-design/rules/button.md | 53 + .cursor/skills/interface-design/rules/chip.md | 54 + .../interface-design/rules/circularicon.md | 42 + .../interface-design/rules/circularstate.md | 41 + .../interface-design/rules/colorpicker.md | 43 + .../interface-design/rules/countrydrawer.md | 65 + .../skills/interface-design/rules/drawer.md | 82 + .cursor/skills/interface-design/rules/flag.md | 38 + .../interface-design/rules/form-checkbox.md | 35 + .../interface-design/rules/form-input.md | 58 + .../interface-design/rules/form-otpfield.md | 43 + .../rules/form-passwordfield.md | 29 + .../interface-design/rules/form-phonefield.md | 61 + .../interface-design/rules/form-radiogroup.md | 51 + .../rules/form-searchfield.md | 45 + .../interface-design/rules/form-select.md | 74 + .../interface-design/rules/form-switch.md | 34 + .../interface-design/rules/form-textarea.md | 46 + .../interface-design/rules/form-utilities.md | 78 + .../rules/form-walletaddressfield.md | 44 + .../skills/interface-design/rules/haptic.md | 43 + .cursor/skills/interface-design/rules/i18n.md | 48 + .../skills/interface-design/rules/listitem.md | 58 + .../interface-design/rules/livefeedback.md | 52 + .../skills/interface-design/rules/marble.md | 41 + .../interface-design/rules/numberpad.md | 53 + .cursor/skills/interface-design/rules/pill.md | 32 + .../skills/interface-design/rules/progress.md | 35 + .../interface-design/rules/safeareaview.md | 38 + .../skills/interface-design/rules/skeleton.md | 48 + .cursor/skills/interface-design/rules/tabs.md | 72 + .../skills/interface-design/rules/toast.md | 66 + .../interface-design/rules/togglegroup.md | 64 + .../skills/interface-design/rules/token.md | 42 + .../skills/interface-design/rules/topbar.md | 60 + .../interface-design/rules/typography.md | 119 + .../rules/verificationbadge.md | 35 + .../vercel-react-best-practices/AGENTS.md | 2197 +++++ .../vercel-react-best-practices/SKILL.md | 127 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-use-latest.md | 49 + .../rules/async-api-routes.md | 35 + .../rules/async-defer-await.md | 80 + .../rules/async-dependencies.md | 37 + .../rules/async-parallel.md | 24 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-barrel-imports.md | 59 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 48 + .../rules/bundle-dynamic-imports.md | 34 + .../rules/bundle-preload.md | 44 + .../rules/client-event-listeners.md | 78 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 78 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 68 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 50 + .../rules/js-min-max-loop.md | 82 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 38 + .../rules/rendering-conditional-render.md | 32 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 36 + .../rules/rendering-hydration-no-flicker.md | 72 + .../rules/rendering-svg-precision.md | 28 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 77 + .../rules/rerender-lazy-state-init.md | 56 + .../rules/rerender-memo.md | 44 + .../rules/rerender-transitions.md | 40 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 26 + .../rules/server-parallel-fetching.md | 79 + .../rules/server-serialization.md | 38 + .cursor/skills/web-design-guidelines/SKILL.md | 40 + .cursor/skills/world-id-sdk/SKILL.md | 235 + .../rules/best-practices-error-handling.md | 139 + .../rules/best-practices-security.md | 114 + .../skills/world-id-sdk/rules/command-chat.md | 165 + .../rules/command-get-permissions.md | 131 + .../world-id-sdk/rules/command-haptics.md | 145 + .../skills/world-id-sdk/rules/command-pay.md | 184 + .../rules/command-request-permission.md | 144 + .../rules/command-send-notifications.md | 147 + .../rules/command-send-transaction.md | 156 + .../rules/command-share-contacts.md | 131 + .../world-id-sdk/rules/command-share.md | 160 + .../rules/command-sign-message.md | 157 + .../rules/command-sign-typed-data.md | 184 + .../world-id-sdk/rules/command-verify.md | 195 + .../world-id-sdk/rules/command-wallet-auth.md | 187 + .../world-id-sdk/rules/initialization.md | 89 + .env.example | 12 + .github/workflows/ci.yaml | 126 + .github/workflows/relyance-sci.yml | 24 + .../workflows/security-scorecard-deploy.yml | 38 + .gitignore | 41 + .prettierignore | 1 + .vscode/extensions.json | 10 + .vscode/settings.json | 9 + @types/env.d.ts | 19 + @types/global.d.ts | 26 + @types/next-auth.d.ts | 12 + @types/next-intl.d.ts | 9 + Dockerfile | 69 + README.md | 37 + app/[locale]/(private)/dashboard/page.tsx | 11 + app/[locale]/(public)/auth/sign-in/page.tsx | 29 + app/[locale]/layout.tsx | 73 + app/[locale]/page.tsx | 16 + app/api/auth/[...nextauth]/route.ts | 5 + app/api/health/route.ts | 5 + app/api/nonce/route.ts | 9 + app/favicon.ico | Bin 0 -> 25931 bytes app/global-error.tsx | 28 + app/globals.css | 50 + app/layout.tsx | 14 + app/not-found.tsx | 3 + components/PageLayout.tsx | 31 + cspell.json | 16 + eslint.config.mjs | 148 + features/auth/components/SignInButtons.tsx | 42 + .../auth/server/auth-options/get-providers.ts | 27 + features/auth/server/auth-options/index.ts | 28 + .../server/auth-options/providers/local.ts | 16 + .../server/auth-options/providers/siwe.ts | 40 + .../auth-options/providers/worldcoin.ts | 20 + features/auth/sign-in/utils/fetch-nonce.ts | 21 + features/auth/sign-in/utils/start-siwe.ts | 44 + i18n/request.ts | 23 + i18n/routing.ts | 53 + messages/en.json | 3 + middleware.ts | 157 + next.config.ts | 49 + package.json | 62 + pnpm-lock.yaml | 7635 +++++++++++++++++ pnpm-workspace.yaml | 5 + postcss.config.mjs | 8 + prettier.config.mjs | 19 + providers/minikit-provider.tsx | 12 + providers/nextauth-provider.tsx | 8 + tsconfig.json | 28 + ui-kit-plugin.ts | 3 + utils/clsx.ts | 6 + utils/complete-siwe.ts | 18 + utils/get-app-url.ts | 30 + utils/resolve-locale.ts | 62 + utils/routes.ts | 5 + utils/safe-call/index.ts | 61 + utils/safe-call/safe-call.test.ts | 262 + vitest.config.ts | 14 + vitest.setup.ts | 6 + 290 files changed, 29398 insertions(+) create mode 100644 .codex/skills/interface-design/SKILL.md create mode 100644 .codex/skills/interface-design/rules/alertdialog.md create mode 100644 .codex/skills/interface-design/rules/best-practices-accessibility.md create mode 100644 .codex/skills/interface-design/rules/best-practices-components.md create mode 100644 .codex/skills/interface-design/rules/best-practices-forms.md create mode 100644 .codex/skills/interface-design/rules/best-practices-i18n.md create mode 100644 .codex/skills/interface-design/rules/best-practices-mobile.md create mode 100644 .codex/skills/interface-design/rules/best-practices-performance.md create mode 100644 .codex/skills/interface-design/rules/best-practices-state.md create mode 100644 .codex/skills/interface-design/rules/best-practices-typography.md create mode 100644 .codex/skills/interface-design/rules/best-practices-validation.md create mode 100644 .codex/skills/interface-design/rules/bottombar.md create mode 100644 .codex/skills/interface-design/rules/bulletlist.md create mode 100644 .codex/skills/interface-design/rules/button.md create mode 100644 .codex/skills/interface-design/rules/chip.md create mode 100644 .codex/skills/interface-design/rules/circularicon.md create mode 100644 .codex/skills/interface-design/rules/circularstate.md create mode 100644 .codex/skills/interface-design/rules/colorpicker.md create mode 100644 .codex/skills/interface-design/rules/countrydrawer.md create mode 100644 .codex/skills/interface-design/rules/drawer.md create mode 100644 .codex/skills/interface-design/rules/flag.md create mode 100644 .codex/skills/interface-design/rules/form-checkbox.md create mode 100644 .codex/skills/interface-design/rules/form-input.md create mode 100644 .codex/skills/interface-design/rules/form-otpfield.md create mode 100644 .codex/skills/interface-design/rules/form-passwordfield.md create mode 100644 .codex/skills/interface-design/rules/form-phonefield.md create mode 100644 .codex/skills/interface-design/rules/form-radiogroup.md create mode 100644 .codex/skills/interface-design/rules/form-searchfield.md create mode 100644 .codex/skills/interface-design/rules/form-select.md create mode 100644 .codex/skills/interface-design/rules/form-switch.md create mode 100644 .codex/skills/interface-design/rules/form-textarea.md create mode 100644 .codex/skills/interface-design/rules/form-utilities.md create mode 100644 .codex/skills/interface-design/rules/form-walletaddressfield.md create mode 100644 .codex/skills/interface-design/rules/haptic.md create mode 100644 .codex/skills/interface-design/rules/i18n.md create mode 100644 .codex/skills/interface-design/rules/listitem.md create mode 100644 .codex/skills/interface-design/rules/livefeedback.md create mode 100644 .codex/skills/interface-design/rules/marble.md create mode 100644 .codex/skills/interface-design/rules/numberpad.md create mode 100644 .codex/skills/interface-design/rules/pill.md create mode 100644 .codex/skills/interface-design/rules/progress.md create mode 100644 .codex/skills/interface-design/rules/safeareaview.md create mode 100644 .codex/skills/interface-design/rules/skeleton.md create mode 100644 .codex/skills/interface-design/rules/tabs.md create mode 100644 .codex/skills/interface-design/rules/toast.md create mode 100644 .codex/skills/interface-design/rules/togglegroup.md create mode 100644 .codex/skills/interface-design/rules/token.md create mode 100644 .codex/skills/interface-design/rules/topbar.md create mode 100644 .codex/skills/interface-design/rules/typography.md create mode 100644 .codex/skills/interface-design/rules/verificationbadge.md create mode 100644 .codex/skills/vercel-react-best-practices/AGENTS.md create mode 100644 .codex/skills/vercel-react-best-practices/SKILL.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 .codex/skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 .codex/skills/web-design-guidelines/SKILL.md create mode 100644 .codex/skills/world-id-sdk/SKILL.md create mode 100644 .codex/skills/world-id-sdk/rules/best-practices-error-handling.md create mode 100644 .codex/skills/world-id-sdk/rules/best-practices-security.md create mode 100644 .codex/skills/world-id-sdk/rules/command-chat.md create mode 100644 .codex/skills/world-id-sdk/rules/command-get-permissions.md create mode 100644 .codex/skills/world-id-sdk/rules/command-haptics.md create mode 100644 .codex/skills/world-id-sdk/rules/command-pay.md create mode 100644 .codex/skills/world-id-sdk/rules/command-request-permission.md create mode 100644 .codex/skills/world-id-sdk/rules/command-send-notifications.md create mode 100644 .codex/skills/world-id-sdk/rules/command-send-transaction.md create mode 100644 .codex/skills/world-id-sdk/rules/command-share-contacts.md create mode 100644 .codex/skills/world-id-sdk/rules/command-share.md create mode 100644 .codex/skills/world-id-sdk/rules/command-sign-message.md create mode 100644 .codex/skills/world-id-sdk/rules/command-sign-typed-data.md create mode 100644 .codex/skills/world-id-sdk/rules/command-verify.md create mode 100644 .codex/skills/world-id-sdk/rules/command-wallet-auth.md create mode 100644 .codex/skills/world-id-sdk/rules/initialization.md create mode 100644 .cursor/skills/interface-design/SKILL.md create mode 100644 .cursor/skills/interface-design/rules/alertdialog.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-accessibility.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-components.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-forms.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-i18n.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-mobile.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-performance.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-state.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-typography.md create mode 100644 .cursor/skills/interface-design/rules/best-practices-validation.md create mode 100644 .cursor/skills/interface-design/rules/bottombar.md create mode 100644 .cursor/skills/interface-design/rules/bulletlist.md create mode 100644 .cursor/skills/interface-design/rules/button.md create mode 100644 .cursor/skills/interface-design/rules/chip.md create mode 100644 .cursor/skills/interface-design/rules/circularicon.md create mode 100644 .cursor/skills/interface-design/rules/circularstate.md create mode 100644 .cursor/skills/interface-design/rules/colorpicker.md create mode 100644 .cursor/skills/interface-design/rules/countrydrawer.md create mode 100644 .cursor/skills/interface-design/rules/drawer.md create mode 100644 .cursor/skills/interface-design/rules/flag.md create mode 100644 .cursor/skills/interface-design/rules/form-checkbox.md create mode 100644 .cursor/skills/interface-design/rules/form-input.md create mode 100644 .cursor/skills/interface-design/rules/form-otpfield.md create mode 100644 .cursor/skills/interface-design/rules/form-passwordfield.md create mode 100644 .cursor/skills/interface-design/rules/form-phonefield.md create mode 100644 .cursor/skills/interface-design/rules/form-radiogroup.md create mode 100644 .cursor/skills/interface-design/rules/form-searchfield.md create mode 100644 .cursor/skills/interface-design/rules/form-select.md create mode 100644 .cursor/skills/interface-design/rules/form-switch.md create mode 100644 .cursor/skills/interface-design/rules/form-textarea.md create mode 100644 .cursor/skills/interface-design/rules/form-utilities.md create mode 100644 .cursor/skills/interface-design/rules/form-walletaddressfield.md create mode 100644 .cursor/skills/interface-design/rules/haptic.md create mode 100644 .cursor/skills/interface-design/rules/i18n.md create mode 100644 .cursor/skills/interface-design/rules/listitem.md create mode 100644 .cursor/skills/interface-design/rules/livefeedback.md create mode 100644 .cursor/skills/interface-design/rules/marble.md create mode 100644 .cursor/skills/interface-design/rules/numberpad.md create mode 100644 .cursor/skills/interface-design/rules/pill.md create mode 100644 .cursor/skills/interface-design/rules/progress.md create mode 100644 .cursor/skills/interface-design/rules/safeareaview.md create mode 100644 .cursor/skills/interface-design/rules/skeleton.md create mode 100644 .cursor/skills/interface-design/rules/tabs.md create mode 100644 .cursor/skills/interface-design/rules/toast.md create mode 100644 .cursor/skills/interface-design/rules/togglegroup.md create mode 100644 .cursor/skills/interface-design/rules/token.md create mode 100644 .cursor/skills/interface-design/rules/topbar.md create mode 100644 .cursor/skills/interface-design/rules/typography.md create mode 100644 .cursor/skills/interface-design/rules/verificationbadge.md create mode 100644 .cursor/skills/vercel-react-best-practices/AGENTS.md create mode 100644 .cursor/skills/vercel-react-best-practices/SKILL.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 .cursor/skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 .cursor/skills/web-design-guidelines/SKILL.md create mode 100644 .cursor/skills/world-id-sdk/SKILL.md create mode 100644 .cursor/skills/world-id-sdk/rules/best-practices-error-handling.md create mode 100644 .cursor/skills/world-id-sdk/rules/best-practices-security.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-chat.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-get-permissions.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-haptics.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-pay.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-request-permission.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-send-notifications.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-send-transaction.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-share-contacts.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-share.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-sign-message.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-sign-typed-data.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-verify.md create mode 100644 .cursor/skills/world-id-sdk/rules/command-wallet-auth.md create mode 100644 .cursor/skills/world-id-sdk/rules/initialization.md create mode 100644 .env.example create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/relyance-sci.yml create mode 100644 .github/workflows/security-scorecard-deploy.yml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 @types/env.d.ts create mode 100644 @types/global.d.ts create mode 100644 @types/next-auth.d.ts create mode 100644 @types/next-intl.d.ts create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app/[locale]/(private)/dashboard/page.tsx create mode 100644 app/[locale]/(public)/auth/sign-in/page.tsx create mode 100644 app/[locale]/layout.tsx create mode 100644 app/[locale]/page.tsx create mode 100644 app/api/auth/[...nextauth]/route.ts create mode 100644 app/api/health/route.ts create mode 100644 app/api/nonce/route.ts create mode 100644 app/favicon.ico create mode 100644 app/global-error.tsx create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/not-found.tsx create mode 100644 components/PageLayout.tsx create mode 100644 cspell.json create mode 100644 eslint.config.mjs create mode 100644 features/auth/components/SignInButtons.tsx create mode 100644 features/auth/server/auth-options/get-providers.ts create mode 100644 features/auth/server/auth-options/index.ts create mode 100644 features/auth/server/auth-options/providers/local.ts create mode 100644 features/auth/server/auth-options/providers/siwe.ts create mode 100644 features/auth/server/auth-options/providers/worldcoin.ts create mode 100644 features/auth/sign-in/utils/fetch-nonce.ts create mode 100644 features/auth/sign-in/utils/start-siwe.ts create mode 100644 i18n/request.ts create mode 100644 i18n/routing.ts create mode 100644 messages/en.json create mode 100644 middleware.ts create mode 100644 next.config.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 postcss.config.mjs create mode 100644 prettier.config.mjs create mode 100644 providers/minikit-provider.tsx create mode 100644 providers/nextauth-provider.tsx create mode 100644 tsconfig.json create mode 100644 ui-kit-plugin.ts create mode 100644 utils/clsx.ts create mode 100644 utils/complete-siwe.ts create mode 100644 utils/get-app-url.ts create mode 100644 utils/resolve-locale.ts create mode 100644 utils/routes.ts create mode 100644 utils/safe-call/index.ts create mode 100644 utils/safe-call/safe-call.test.ts create mode 100644 vitest.config.ts create mode 100644 vitest.setup.ts diff --git a/.codex/skills/interface-design/SKILL.md b/.codex/skills/interface-design/SKILL.md new file mode 100644 index 0000000..9f1a847 --- /dev/null +++ b/.codex/skills/interface-design/SKILL.md @@ -0,0 +1,172 @@ +--- +name: mini-apps-ui-kit-react +description: >- + A comprehensive React UI component library for building mini-apps with form controls, + buttons, feedback components, overlays, layout components, and utilities. Built with + TypeScript, Tailwind CSS, Radix UI primitives, and Vaul for drawers. +license: MIT +compatibility: React 18+, TypeScript, Tailwind CSS, SSR-friendly, RTL support +metadata: + author: Worldcoin + version: '1.0.0' +--- + +# Mini Apps UI Kit - Component Skills Reference + +This document provides a comprehensive reference for all components in the `@worldcoin/mini-apps-ui-kit-react` package. Each component is documented with its purpose, props, usage examples, variants, and edge cases to help AI agents effectively use these components. + +## When to Apply + +Reference these guidelines when: + +- Building UI components with the Mini Apps UI Kit +- Implementing forms, buttons, or interactive elements +- Creating layouts, navigation, or feedback components +- Reviewing code for UI/UX best practices +- Ensuring accessibility and mobile-first design + +## Component Categories + +### Form Controls + +- `rules/form-input.md` - Input component with adornments and validation +- `rules/form-phonefield.md` - Phone number input with country selection +- `rules/form-passwordfield.md` - Password input with visibility toggle +- `rules/form-searchfield.md` - Search input with paste button +- `rules/form-textarea.md` - Multi-line text input +- `rules/form-select.md` - Dropdown select component +- `rules/form-checkbox.md` - Checkbox component +- `rules/form-switch.md` - Toggle switch component +- `rules/form-radiogroup.md` - Radio group component +- `rules/form-otpfield.md` - One-time password input +- `rules/form-walletaddressfield.md` - Wallet address input + +### Buttons & Actions + +- `rules/button.md` - Versatile button component +- `rules/chip.md` - Chip component with variants +- `rules/pill.md` - Pill-shaped toggle component +- `rules/token.md` - Token symbol display + +### Feedback & Display + +- `rules/toast.md` - Toast notification system +- `rules/livefeedback.md` - Async operation feedback wrapper +- `rules/progress.md` - Progress indicator +- `rules/skeleton.md` - Loading skeleton placeholders +- `rules/typography.md` - Typography system +- `rules/flag.md` - Country flag component +- `rules/marble.md` - Circular image component +- `rules/verificationbadge.md` - Verification status badge + +### Overlays & Dialogs + +- `rules/drawer.md` - Bottom drawer component +- `rules/alertdialog.md` - Alert dialog modal +- `rules/countrydrawer.md` - Country selection drawer + +### Layout & Navigation + +- `rules/topbar.md` - Top navigation bar +- `rules/bottombar.md` - Bottom action bar +- `rules/tabs.md` - Tab navigation +- `rules/safeareaview.md` - Safe area wrapper + +### Interactive Elements + +- `rules/numberpad.md` - Numeric keypad +- `rules/colorpicker.md` - Color picker component +- `rules/togglegroup.md` - Toggle group component +- `rules/listitem.md` - List item component + +### Utilities + +- `rules/haptic.md` - Haptic feedback wrapper +- `rules/form-utilities.md` - Form validation utilities +- `rules/bulletlist.md` - Bullet list component +- `rules/circularicon.md` - Circular icon container +- `rules/circularstate.md` - Circular state indicator +- `rules/i18n.md` - Internationalization support + +## Best Practices + +- `rules/best-practices-typography.md` - Typography & content guidelines +- `rules/best-practices-forms.md` - Forms & inputs guidelines +- `rules/best-practices-components.md` - Component usage guidelines +- `rules/best-practices-accessibility.md` - Accessibility requirements +- `rules/best-practices-mobile.md` - Mobile & touch guidelines +- `rules/best-practices-state.md` - State & navigation guidelines +- `rules/best-practices-i18n.md` - Internationalization guidelines +- `rules/best-practices-validation.md` - Error handling & validation +- `rules/best-practices-performance.md` - Performance & loading + +## Quick Reference + +### Form Controls + +All form controls integrate with the `Form` component for validation: + +```tsx + + + + + + Please enter a valid email + + +``` + +### Typography + +Always use `Typography` component instead of raw HTML elements: + +```tsx + + Main Page Title + +``` + +### Buttons + +Use appropriate variants and sizes: + +```tsx + + + +``` + +## How to Use + +Read individual rule files for detailed component documentation: + +``` +rules/form-input.md +rules/button.md +rules/best-practices-typography.md +``` + +Each rule file contains: + +- Component purpose and use cases +- Key props and their types +- Usage examples with code +- Edge cases and gotchas +- Storybook references + +## See Also + +- **Form Controls**: All integrate with Form component for validation +- **Overlays**: Drawer and AlertDialog use Vaul and Radix UI Dialog +- **Feedback**: Toast, LiveFeedback, and Progress provide user feedback +- **Layout**: TopBar and BottomBar commonly used together in mobile layouts +- **Icons**: Many components accept icon props - see icon exports from the package +- **Typography**: Use Typography component for all text content +- **Validation**: Form component provides validation patterns + +--- + +_Last updated: Based on Storybook stories in `stories/` directory_ diff --git a/.codex/skills/interface-design/rules/alertdialog.md b/.codex/skills/interface-design/rules/alertdialog.md new file mode 100644 index 0000000..dd4b6f9 --- /dev/null +++ b/.codex/skills/interface-design/rules/alertdialog.md @@ -0,0 +1,100 @@ +--- +title: AlertDialog Component +category: overlays-dialogs +tags: dialog, modal, alert, confirmation, vaul +--- + +## AlertDialog + +A modal dialog that interrupts the user with important content and expects a response. Built on top of Vaul and Radix UI Dialog. Use for confirmations, warnings, or critical information. + +**Key Components**: + +- `AlertDialog`: Root component +- `AlertDialogTrigger`: Button/element that opens the dialog +- `AlertDialogContent`: Main content container +- `AlertDialogHeader`: Header section (supports icon prop) +- `AlertDialogTitle`: Title text +- `AlertDialogDescription`: Description/body text +- `AlertDialogFooter`: Footer with action buttons +- `AlertDialogClose`: Element that closes dialog +- `AlertDialogPortal`: Portal for rendering (optional) + +**Key Props**: + +- `dismissible` (boolean): Whether the dialog can be dismissed (default: true) + +**Examples**: + +```tsx +// Basic alert dialog + + + + + + + Are you sure? + + + This action cannot be undone. This will permanently delete your account. + + + + + + + + + + +// With icon + + + + + + }> + Are you sure you want to delete your account? + + + This action cannot be undone. + + + + + + + + + + +// With long scrollable content + + + + Terms and Conditions + + + {/* Long scrollable content */} + + + + + + + + + +``` + +**Edge Cases**: + +- Use `asChild` on trigger and close elements +- Header supports icon prop for custom styling +- Description area is scrollable for long content +- Footer typically contains action buttons + +**Storybook Reference**: `stories/AlertDialog.stories.tsx` diff --git a/.codex/skills/interface-design/rules/best-practices-accessibility.md b/.codex/skills/interface-design/rules/best-practices-accessibility.md new file mode 100644 index 0000000..9888357 --- /dev/null +++ b/.codex/skills/interface-design/rules/best-practices-accessibility.md @@ -0,0 +1,32 @@ +--- +title: Accessibility Best Practices +category: best-practices +tags: accessibility, a11y, keyboard, screen-reader, aria +--- + +## Accessibility + +Concise rules for building accessible interfaces with the Mini Apps UI Kit. Use MUST/SHOULD/NEVER to guide decisions. + +- MUST: Components built on Radix UI include proper ARIA attributes automatically +- MUST: Full keyboard support per [WAI-ARIA APG](https://www.w3.org/WAI/ARIA/apg/patterns/) +- MUST: Visible focus rings (handled by components; use `:focus-visible` for custom elements) +- MUST: Manage focus (trap, move, return) in modals and drawers +- MUST: Use semantic HTML tags via `as` prop for screen readers +- MUST: Associate form labels with inputs using `htmlFor` and `id` +- SHOULD: Test with keyboard navigation and screen readers +- NEVER: Remove focus styles without providing visible replacement +- NEVER: Use `
` for navigation (use `` or ``) + +**Examples**: + +```tsx +// ✅ Correct + + Email Address + + + +// ❌ Incorrect +
Navigate
// Should use Link or Button +``` diff --git a/.codex/skills/interface-design/rules/best-practices-components.md b/.codex/skills/interface-design/rules/best-practices-components.md new file mode 100644 index 0000000..93ebc93 --- /dev/null +++ b/.codex/skills/interface-design/rules/best-practices-components.md @@ -0,0 +1,30 @@ +--- +title: Component Usage Best Practices +category: best-practices +tags: components, ui-kit, structure, usage +--- + +## Components & Structure + +Concise rules for using UI Kit components effectively. Use MUST/SHOULD/NEVER to guide decisions. + +- MUST: Use UI Kit components instead of building custom equivalents +- MUST: Check corresponding `.stories.tsx` file for component usage examples +- MUST: Use `Toaster` component in app root when using Toast notifications +- MUST: Wrap form controls with `Form.Control` using `asChild` prop +- SHOULD: Use consistent icon sizes (typically 20x20px) when providing custom icons +- SHOULD: Use `fullWidth` prop on buttons in `BottomBar` for consistent sizing +- NEVER: Create custom components that duplicate UI Kit functionality +- NEVER: Use raw HTML elements when UI Kit components exist + +**Examples**: + +```tsx +// ✅ Correct + + + +// ❌ Incorrect + + +``` diff --git a/.codex/skills/interface-design/rules/best-practices-forms.md b/.codex/skills/interface-design/rules/best-practices-forms.md new file mode 100644 index 0000000..fbbaba1 --- /dev/null +++ b/.codex/skills/interface-design/rules/best-practices-forms.md @@ -0,0 +1,43 @@ +--- +title: Forms & Inputs Best Practices +category: best-practices +tags: forms, inputs, validation, error-handling +--- + +## Forms & Inputs + +Concise rules for building accessible, fast, delightful forms with the Mini Apps UI Kit. Use MUST/SHOULD/NEVER to guide decisions. + +- MUST: Use `Form.Root`, `Form.Field`, and `Form.Control` for validation and error display +- MUST: Add `has-error` className to `Form.Field` when showing error states +- MUST: Use controlled state for all form inputs (`value` + `onChange`) +- MUST: Display errors inline next to fields using `Form.Message` +- MUST: Focus first error field on form submission +- MUST: Use appropriate `autocomplete` and `name` attributes for password managers +- MUST: Allow paste in all input fields (never block paste) +- MUST: Accept free text input, validate after—don't block typing +- MUST: Allow incomplete form submission to surface validation errors +- MUST: Keep submit button enabled until request starts, then disable with spinner +- MUST: Use `LiveFeedback` wrapper for async form submissions +- SHOULD: Disable spellcheck for emails, codes, and usernames +- SHOULD: Use placeholders that end with `…` and show example patterns +- NEVER: Block paste in `` or `