-
Notifications
You must be signed in to change notification settings - Fork 7
feat: VeChain whitelabel cross-app connect host #620
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 93 commits
Commits
Show all changes
106 commits
Select commit
Hold shift + click to select a range
7439ec2
feat(cross-app-connect): add whitelabel Privy cross-app provider host
Agilulfo1820 bfe136f
chore(deps): bump @privy-io/cross-app-connect from 0.2.2 to 0.5.8
Agilulfo1820 ae43018
feat(cross-app-connect): custom sign-in UI without Privy modal
Agilulfo1820 6de1228
feat(cross-app): pass login intent through to whitelabel connect page
Agilulfo1820 c02fa3d
feat(login): allow google/apple/email login methods without privy prop
Agilulfo1820 39c8d00
fix(login): show google/apple/email buttons when no privy prop
Agilulfo1820 ca157e0
fix(cross-app-connect): break OAuth redirect loop on intent flow
Agilulfo1820 b3288a5
feat(cross-app-connect): auto-accept connection after sign-in
Agilulfo1820 5016d98
refactor(login): route useLoginWithOAuth fallback inside the hook
Agilulfo1820 4ca19de
fix(cross-app-connect): only auto-accept when the user just authentic…
Agilulfo1820 25d81c0
feat(login): all 10 privy oauth providers fall back to cross-app
Agilulfo1820 8e7a990
feat(cross-app-connect): support all 10 privy oauth providers in sign…
Agilulfo1820 7f48072
chore(examples): list all 10 oauth providers + update notes
Agilulfo1820 087d9b2
chore(login): trim oauth list to providers actually enabled in vechai…
Agilulfo1820 8a2bba1
docs(login): reflect cross-app fallback in login-modal page
Agilulfo1820 4474d8a
fix(cross-app-connect): honor intent when an old session already exists
Agilulfo1820 05f189e
fix(cross-app-connect): phase machine + honor matching session
Agilulfo1820 88bc9e7
feat(cross-app-connect): vechain brand theme + system color mode
Agilulfo1820 e93437b
feat(cross-app-connect): privy-style sign-in panel + recent badge
Agilulfo1820 9499da6
feat(cross-app-connect): apply vechain branding to transact page
Agilulfo1820 3dc9167
fix(cross-app-connect): suppress body hydration warning + add debug t…
Agilulfo1820 a1e6de4
fix(cross-app-connect): make color-mode toggle visible everywhere
Agilulfo1820 4b27f5a
chore(cross-app-connect): move color-mode toggle to top-left
Agilulfo1820 8acab11
feat(cross-app-connect): rework sign-in list per vechain config
Agilulfo1820 ccba48b
fix(login): email requires privy again; add phone/farcaster intents
Agilulfo1820 445a7e6
fix(cross-app-connect): logo flicker + cancel button invisibility
Agilulfo1820 7c20727
refactor(cross-app-connect): mirror vechain-kit's design tokens
Agilulfo1820 1fc7dde
refactor(cross-app-connect): polish sign-in UX (chip, link, dot, labels)
Agilulfo1820 40fde85
chore(cross-app-connect): chromatic glyphs for discord/tiktok/line/phone
Agilulfo1820 52cf8b9
feat(cross-app-connect): translate transactions into plain language
Agilulfo1820 6a4f447
feat: simulate on homepage
Agilulfo1820 183d960
feat(cross-app-connect): resolve unknown ERC-20 metadata from thor
Agilulfo1820 7fc1551
feat: yarn
Agilulfo1820 4471de1
feat(cross-app-connect): balance change preview on the transact screen
Agilulfo1820 54c4867
feat(cross-app-connect): label known contracts, hide dev noise
Agilulfo1820 9ea4c98
fix: remove more
Agilulfo1820 b5491d0
fix: build
Agilulfo1820 c14257c
feat(cross-app-connect): account chip, shield title, friendly labels
Agilulfo1820 9e6836f
feat(cross-app-connect): resolve .vet domain + avatar via kit hooks
Agilulfo1820 e798d70
revert(cross-app-connect): drop balance change simulation
Agilulfo1820 f2e5dc5
fix(provider): fall back to VECHAIN_PRIVY_APP_ID when no privy prop
Agilulfo1820 c1b70e6
feat(cross-app-connect): risk-adaptive shield, specific titles, more
Agilulfo1820 ee06f2f
chore(cross-app-connect): hide color-mode toggle by default
Agilulfo1820 09048c5
chore(cross-app-connect): swap wordmark for logomark in the header
Agilulfo1820 1aa4180
style: content
Agilulfo1820 31db629
feat(cross-app-connect): identity row + force light mode
Agilulfo1820 2e13914
feat(cross-app-connect): app-hub verification + identity polish
Agilulfo1820 440d69b
chore(cross-app-connect): tighten unverified-app warning copy
Agilulfo1820 2bb3b43
feat(cross-app-connect): swap in-place spinners for skeletons
Agilulfo1820 b074ddd
style(cross-app-connect): align transact card with the connect pattern
Agilulfo1820 9abe319
chore(cross-app-connect): retitle picker to "Log in to your wallet"
Agilulfo1820 3f0a11f
chore(cross-app-connect): apply default title to VechainHeader
Agilulfo1820 0da6985
feat(cross-app-connect): support personal_sign and generic eth_signTy…
Agilulfo1820 9e6383f
feat: get rid of chakra, vechain kit and tanstack
Agilulfo1820 3b0013f
feat: use same account component
Agilulfo1820 97c55c9
feat: nextjs 16
Agilulfo1820 3fd69f0
feat(cross-app-connect): polish identity + requester chip
Agilulfo1820 f0adbf3
feat(cross-app-connect): recognize ecosystem actions + polish transac…
Agilulfo1820 da7e8f3
feat(cross-app-connect): render typed data as labelled fields, not JSON
Agilulfo1820 87807b0
feat(cross-app-connect): wire up i18next foundation
Agilulfo1820 5923631
feat(cross-app-connect): extract ~235 strings to en.json + thread t()…
Agilulfo1820 18c2d48
feat(cross-app): pass kit language to the cross-app popup URL
Agilulfo1820 19e30ab
feat(cross-app-connect): translate UI to Italian and French
Agilulfo1820 17ceab5
feat(cross-app-connect): translate UI to the remaining 14 locales
Agilulfo1820 40a3de5
i18n(cross-app-connect): translate block + error + Privy UI strings
Agilulfo1820 6d87af0
feat: add yarn lock
Agilulfo1820 21fedfe
fix(cross-app-connect): silence script warning + i18n hydration mismatch
Agilulfo1820 5c0dff8
fix(cross-app-connect): kill the en → it text flash by gating SSR
Agilulfo1820 5ac0cba
revert(i18n): always use device language, drop URL/localStorage/kit sync
Agilulfo1820 90fa08b
chore: tsconfig
Agilulfo1820 e886dd2
feat(cross-app-connect): own the session-expired login screen + remem…
Agilulfo1820 1933a21
fix(cross-app-connect): auto-create connection record when transact l…
Agilulfo1820 44117fd
test(cross-app-connect): force-flag to exercise the no-connection ret…
Agilulfo1820 57bf752
fix(cross-app-connect): escape from error screen + diagnose retry fai…
Agilulfo1820 6c37832
revert: drop broken inline acceptConnection retry (decrypt fails)
Agilulfo1820 36f9c52
feat(cross-app): recover from stale connection record
Agilulfo1820 04dfeb4
chore(cross-app): widen stale-connection regex + add recovery logs
Agilulfo1820 bc39273
chore(vechain-kit): log mount + every vk:* message in recovery hook
Agilulfo1820 a93270d
debug(cross-app): stable kit listener + opener/error diagnostics
Agilulfo1820 e787f8e
fix(cross-app): trigger recovery via Privy's error channel on close
Agilulfo1820 43efccc
chore(vechain-kit): filter metamask noise from recovery listener logs
Agilulfo1820 b312044
chore(cross-app): drop the recovery-flow diagnostic logs
Agilulfo1820 ca29150
fix(cross-app): translate "Your account" + correct calldata key path
Agilulfo1820 d6161e3
style(cross-app): drop the title shield icon
Agilulfo1820 66eb14f
docs(cross-app-connect): add README explaining scope and stack choices
Agilulfo1820 d1ea57d
ci(cross-app-connect): add PR check + GitHub Pages deploy workflows
Agilulfo1820 d950b9f
docs(readme): mention cross-app whitelabel + link to popup README
Agilulfo1820 2f770aa
ci(cross-app-connect): scheduled app-hub cache refresh + auto PR
Agilulfo1820 1889685
ci(cross-app-connect): scope sensitive permissions to the jobs that n…
Agilulfo1820 9279068
feat(kit): allow `more` login method without a Privy prop
Agilulfo1820 caf7d1b
fix(kit): show `more` link without Privy + gate ecosystem on app IDs
Agilulfo1820 cfd4a40
fix(kit): VeWorld logo in dark mode + reorder More sub-view
Agilulfo1820 d0dc66a
fix(kit): rename More-view VeChain row to "Login with social"
Agilulfo1820 0b200c0
fix(kit): plain "View more" row with ellipsis icon for the picker entry
Agilulfo1820 cdda9ea
feat(kit): move primary-CTA treatment to the first login method
Agilulfo1820 1c91822
feat(kit): add `isPrimary` to LoginMethodOrder, fall back to first vi…
Agilulfo1820 ddfc7fe
chore(cross-app): temporarily force English for upcoming demo
Agilulfo1820 b166d93
fix(kit): respect iOS safe-area-inset-bottom in the bottom-sheet modal
Agilulfo1820 952ecd2
refactor(kit): modern shared StatusScreen for success/error surfaces
Agilulfo1820 bcef527
copy(kit): "Operation successful" + contextual body messages
Agilulfo1820 42c21a2
fix(kit): never render "0 TOKEN" in the swap success description
Agilulfo1820 4076830
fix(cross-app): show social handle instead of did:privy:… for X / Dis…
Agilulfo1820 c58e688
chore: playground setup
Agilulfo1820 6ba7979
fix(cross-app + kit): address CodeRabbit review findings
Agilulfo1820 30a1357
revert(cross-app): re-enable browser language detection after demo
Agilulfo1820 40353e2
fix: yarn lock
Agilulfo1820 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| name: Cross-App Connect — Check | ||
|
|
||
| on: | ||
| # zizmor: ignore[dangerous-triggers] - Mitigated with label-based approval | ||
| pull_request_target: | ||
| types: [labeled, opened, synchronize, reopened] | ||
| branches: | ||
| - main | ||
| paths: | ||
| - 'cross-app-connect/**' | ||
| - 'packages/vechain-kit/**' | ||
| - 'yarn.lock' | ||
| - '.github/workflows/cross-app-connect-check.yaml' | ||
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} | ||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| # External PRs: post a one-time comment explaining the safe-to-build gate. | ||
| comment-external-pr: | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| pull-requests: write | ||
| if: | | ||
| github.event.pull_request.head.repo.full_name != github.repository && | ||
| github.event.action == 'opened' | ||
| steps: | ||
| - name: Comment on external PR | ||
| uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 | ||
| with: | ||
| issue-number: ${{ github.event.pull_request.number }} | ||
| body: | | ||
| ## 👋 Thanks for your contribution! | ||
|
|
||
| Since this PR comes from a fork, the cross-app-connect | ||
| check will only run after a maintainer adds the | ||
| `safe-to-build` label (and re-adds it after each new | ||
| commit, for security). | ||
|
|
||
| typecheck-and-build: | ||
| name: Type-check & Build | ||
| runs-on: ubuntu-latest | ||
| if: | | ||
| (github.event.label.name == 'safe-to-build') || | ||
| (github.event.pull_request.head.repo.full_name == github.repository) && github.event.pull_request.head.ref != 'main' | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | ||
| with: | ||
| ref: ${{ github.event.pull_request.head.sha }} | ||
|
|
||
| - name: Setup Node | ||
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | ||
| with: | ||
| node-version-file: .nvmrc | ||
| cache: yarn | ||
|
|
||
| - name: Install | ||
| run: yarn && yarn install:all | ||
|
|
||
| - name: Type-check (cross-app-connect) | ||
| run: yarn workspace cross-app-connect typecheck | ||
|
|
||
| - name: Build (cross-app-connect) | ||
| run: yarn workspace cross-app-connect build | ||
| env: | ||
| # Build-time public env. Provided as repo Variables; the | ||
| # popup needs them to construct the Privy client. The build | ||
| # tolerates missing values but won't run end-to-end without | ||
| # them — sufficient to verify the bundle compiles cleanly. | ||
| NEXT_PUBLIC_PRIVY_APP_ID: ${{ vars.NEXT_PUBLIC_PRIVY_APP_ID }} | ||
| NEXT_PUBLIC_PRIVY_CLIENT_ID: ${{ vars.NEXT_PUBLIC_PRIVY_CLIENT_ID }} | ||
| NEXT_PUBLIC_PRIVY_DOMAIN: ${{ vars.NEXT_PUBLIC_PRIVY_DOMAIN }} | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,83 @@ | ||
| name: Cross-App Connect — Deploy to Pages | ||
|
|
||
| on: | ||
| push: | ||
| branches: | ||
| - main | ||
| paths: | ||
| - 'cross-app-connect/**' | ||
| - 'packages/vechain-kit/**' | ||
| - 'yarn.lock' | ||
| - '.github/workflows/cross-app-connect-deploy.yaml' | ||
| workflow_dispatch: | ||
|
|
||
| concurrency: | ||
| # Pages permits one in-flight deploy. Queue rather than cancel so a hot | ||
| # fix doesn't get wiped by a follow-up merge mid-deploy. | ||
| group: pages | ||
| cancel-in-progress: false | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| build: | ||
| name: Build static site | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: read | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | ||
|
|
||
| - name: Setup Node | ||
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | ||
| with: | ||
| node-version-file: .nvmrc | ||
| cache: yarn | ||
|
|
||
| - name: Install | ||
| run: yarn && yarn install:all | ||
|
|
||
| - name: Build (cross-app-connect) | ||
| run: yarn workspace cross-app-connect build | ||
| env: | ||
| NEXT_PUBLIC_PRIVY_APP_ID: ${{ vars.NEXT_PUBLIC_PRIVY_APP_ID }} | ||
| NEXT_PUBLIC_PRIVY_CLIENT_ID: ${{ vars.NEXT_PUBLIC_PRIVY_CLIENT_ID }} | ||
| NEXT_PUBLIC_PRIVY_DOMAIN: ${{ vars.NEXT_PUBLIC_PRIVY_DOMAIN }} | ||
| # Empty when a custom domain is set up in repo Settings → | ||
| # Pages. Override to `/vechain-kit` (or whatever the repo | ||
| # name is) if you want to test at the default | ||
| # `<org>.github.io/<repo>/` URL before the CNAME points here. | ||
| NEXT_PUBLIC_BASE_PATH: ${{ vars.NEXT_PUBLIC_BASE_PATH }} | ||
|
|
||
| - name: Disable Jekyll on Pages | ||
| # GitHub Pages otherwise strips paths starting with `_` (e.g. | ||
| # `_next/`), which kills every JS/CSS chunk Next.js emits. | ||
| run: touch cross-app-connect/dist/.nojekyll | ||
|
|
||
| - name: Configure Pages | ||
| uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 | ||
|
|
||
| - name: Upload artifact | ||
| uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 | ||
| with: | ||
| path: cross-app-connect/dist | ||
|
|
||
| deploy: | ||
| name: Deploy to GitHub Pages | ||
| needs: build | ||
| runs-on: ubuntu-latest | ||
| # Pages-specific permissions scoped to this job only — zizmor flags | ||
| # them as too broad at the workflow level since the build job | ||
| # doesn't need to write anything. | ||
| permissions: | ||
| pages: write | ||
| id-token: write | ||
| environment: | ||
| name: github-pages | ||
| url: ${{ steps.deployment.outputs.page_url }} | ||
| steps: | ||
| - name: Deploy | ||
| id: deployment | ||
| uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| name: Cross-App Connect — Refresh App Hub cache | ||
|
|
||
| on: | ||
| schedule: | ||
| # Daily at 04:13 UTC — odd minute to avoid the top-of-hour rush on | ||
| # GitHub-hosted runners, and well before EU/US working hours so a | ||
| # follow-up PR is waiting for review when the team comes online. | ||
| - cron: '13 4 * * *' | ||
| workflow_dispatch: | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| concurrency: | ||
| # Only one refresh attempt at a time; if a previous PR is still pending | ||
| # merge, queueing another would create a duplicate branch tip. | ||
| group: ${{ github.workflow }} | ||
| cancel-in-progress: false | ||
|
|
||
| jobs: | ||
| refresh: | ||
| name: Regenerate app-hub.json | ||
| runs-on: ubuntu-latest | ||
| # PR-opening permissions are scoped to this job (zizmor flags them | ||
| # as too broad at the workflow level). | ||
| permissions: | ||
| contents: write | ||
| pull-requests: write | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | ||
|
|
||
| - name: Setup Node | ||
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | ||
| with: | ||
| node-version-file: .nvmrc | ||
| cache: yarn | ||
|
|
||
| - name: Install | ||
| run: yarn && yarn install:all | ||
|
|
||
| - name: Regenerate cache | ||
| run: yarn workspace cross-app-connect generate-app-hub | ||
| env: | ||
| # Raises the GitHub API rate limit from 60/hr (anonymous) | ||
| # to 5000/hr so the fetch can cover the full registry | ||
| # without throttling. | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
|
||
| - name: Open PR if anything changed | ||
| uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 | ||
| with: | ||
| commit-message: | | ||
| chore(cross-app-connect): refresh app-hub.json from vechain/app-hub | ||
|
|
||
| Auto-generated by the cross-app-connect-refresh-app-hub workflow. | ||
| title: 'chore(cross-app-connect): refresh app-hub cache' | ||
| body: | | ||
| Scheduled refresh of `cross-app-connect/src/app/cross-app/_lib/app-hub.json` from [`vechain/app-hub`](https://github.com/vechain/app-hub). | ||
|
|
||
| The cache keys the registry by origin so the transact popup can show | ||
| `Confirm token swap on Nubila` instead of a raw URL. This PR appears | ||
| whenever a new app is added, an existing one is updated, or one is | ||
| removed from the registry. | ||
|
|
||
| Review the diff to make sure the changes look like additions you | ||
| expected (no surprise deletions, plausible names). Merge when happy. | ||
|
|
||
| 🤖 Opened by `.github/workflows/cross-app-connect-refresh-app-hub.yaml`. | ||
| branch: chore/refresh-app-hub-cache | ||
| base: main | ||
| delete-branch: true | ||
| labels: | | ||
| chore | ||
| automated | ||
| add-paths: | | ||
| cross-app-connect/src/app/cross-app/_lib/app-hub.json |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| # Privy app this host represents | ||
| # Default = VeChain's mainnet Privy app (mirrors VECHAIN_PRIVY_APP_ID in vechain-kit) | ||
| NEXT_PUBLIC_PRIVY_APP_ID=cm4wxxujb022fyujl7g0thb21 | ||
| NEXT_PUBLIC_PRIVY_CLIENT_ID= | ||
| # REQUIRED. Whitelabel Privy auth subdomain provisioned for your app in the | ||
| # Privy dashboard. Must include scheme, e.g. https://privy.your-app.privy.dev | ||
| # This is NOT the public auth.privy.io host. | ||
| NEXT_PUBLIC_PRIVY_DOMAIN= | ||
|
|
||
| # VeChain network -- main | test | solo | ||
| NEXT_PUBLIC_NETWORK_TYPE=main | ||
| NEXT_PUBLIC_DELEGATOR_URL= | ||
| NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID= |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| module.exports = { | ||
| extends: ['next'], | ||
| rules: { | ||
| '@typescript-eslint/unbound-method': 'off', | ||
| }, | ||
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. | ||
|
|
||
| # dependencies | ||
| /node_modules | ||
| /.pnp | ||
| .pnp.js | ||
| .yarn/install-state.gz | ||
|
|
||
| # testing | ||
| /coverage | ||
|
|
||
| # next.js | ||
| /.next/ | ||
| /out/ | ||
| /dist/ | ||
|
|
||
| # production | ||
| /build | ||
|
|
||
| # misc | ||
| .DS_Store | ||
| *.pem | ||
|
|
||
| # debug | ||
| npm-debug.log* | ||
| yarn-debug.log* | ||
| yarn-error.log* | ||
|
|
||
| # local env files | ||
| .env | ||
| .env*.local | ||
|
|
||
| # vercel | ||
| .vercel | ||
|
|
||
| # typescript | ||
| *.tsbuildinfo | ||
| next-env.d.ts |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.