Conversation
Adds zustand and minimal stores under pkgs/frontend/app/stores/ to provide a global UI state foundation per Phase 1-5 of #418. - workspace: currentWorkspaceId, recent[], switch() (persisted) - ui: sheetOpen, modalOpen, theme (theme persisted) - session: cached identity (ENS, avatar, smart wallet) (persisted) Stores are additive only; no existing components are wired up yet — that migration is gated on the Phase 1/2 framework + design system work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add .worktree-setup.log to .gitignore so the bootstrap log from scripts/claude-worktree-create.sh is not surfaced as untracked. - Stop running pnpm frontend codegen during worktree creation. The generated gql/ types are committed to the repo, so re-running codegen against the live Goldsky schema produced ephemeral diffs on every new worktree. Devs can run codegen manually when needed. - Update README to reflect the new worktree bootstrap steps. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat: introduce Zustand for global UI state (#423)
Removes the "便利な素材から選択" preset RPG icon library so that role icons converge on the icon set being introduced in #436. Adds an `isLegacyRoleImageUri` helper and wires `RoleIcon` to fall back to the default badge icon when an existing hat still references one of the removed CIDs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chore(frontend): remove role image library and add legacy CID fallback (#459)
- replace @remix-run/* and remix-toast with @react-router/{dev,node,serve,fs-routes} + react-router(-dom) at ^7.15.0
- swap vite plugin to reactRouter() and add react-router.config.ts (ssr:true)
- preserve flat-route file convention via @react-router/fs-routes (app/routes.ts)
- rewrite entry.client.tsx (HydratedRouter) and entry.server.tsx (ServerRouter) — keep sync renderToString for emotion critical CSS extraction
- drop remix-toast getToast loader from root; keep react-toastify ToastContainer
- bulk-rewrite @remix-run/{react,node} imports to react-router across 22 routes and 11 components
- bump vite ^5.3.6 → ^7.3.3, vite-tsconfig-paths ^4.3.2 → ^6.1.1
- wire react-router typegen into tsconfig (rootDirs + .react-router/types include) and typecheck script
- ignore /.react-router typegen output
React 18 stays put; React 19 bump tracked separately in #464.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(frontend): migrate Remix to Vite + React Router v7 (#419)
…ion (#417) Introduce HatsQuestModule, a HatsModule clone deployed per workspace that escrows RoleShare (HatsFractionTokenModule ERC1155) into the contract on quest creation and releases it to the submitter only after creator-single or two-hat-holder approval, with cancel returning the escrow. Wire it through BigBang and SplitsCreator so the workspace deploys the module automatically and the splits aggregation credits escrowed shares back to the creator while excluding the module address from recipients. Also relax the FractionToken transfer guard to fire only for the original wearer, allowing intermediate holders (e.g. the quest module) to drain their full balance. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…time) and mintableAmount Both failures in #462 stemmed from test-side expected-value math drifting from what the contracts actually return: - SplitsCreator preview (with thanks token weight): expected used `getBlock("latest").timestamp - addressWoreTime`, which did not equal the `block.timestamp` seen by the `preview` eth_call after prior tests advanced time. Read elapsed times from `getWearingElapsedTime` directly so the test sees exactly what the contract sees. - ThanksToken mintableAmount with RoleShare but without hat: expected was a hardcoded 39-digit literal that included a spurious `1e18` factor and used hours instead of the contract's 10-minute units. Compute it dynamically from the contract's own state, mirroring `ThanksToken.mintableAmount`. Closes #462 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
test(contract): fix two main-branch test failures (#462)
`pkgs/frontend/.react-router/types/+routes.ts` is generated by
`react-router typegen` on every pre-commit and uses `params: {}` which
biome's noBannedTypes rule rejects. The file is not human-authored, so
add it to biome's ignore list alongside the other generated artifacts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds two paths to revert a quest from PendingReview back to Open so a different submitter can apply when the current submission is unsuitable or its author becomes unresponsive: - withdrawSubmission: submitter retracts their own submission - rejectSubmission: creator rejects the current submission Both clear submitter, submittedAt, and any approvals collected for the rejected attempt so the next submitter starts from a clean slate. Escrow stays intact — only cancel (Open-only) returns it to the creator. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(contract): add HatsQuestModule for trustless RoleShare distribution (#417)
Test Contracts (and the other workflows) ran with pnpm 8.15.4 against a lockfileVersion 9 pnpm-lock.yaml. pnpm 8 cannot read v9 lockfiles, so `pnpm install` re-resolved dependencies and pulled `@openzeppelin/contracts` ^5.0.2 forward to a release that uses Cancun's `mcopy` opcode in `Arrays.sol`/`Bytes.sol`/`SignatureChecker.sol`. Hardhat's default solc target is `paris`, so compilation failed with HH600 across every PR and every push to main since the lockfile was upgraded. - Bump pnpm/action-setup to version 9 in all three workflows so it can read the lockfile, and switch to `pnpm install --frozen-lockfile` so CI matches the committed lockfile and drift is caught early. - Set `evmVersion: "cancun"` in `pkgs/contract/hardhat.config.ts` as defense in depth — all deploy targets (Base, Sepolia, Holesky, Ethereum mainnet) have supported Cancun for over a year, and future OpenZeppelin releases will keep adding Cancun-only opcodes. Closes #470 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ci: fix Test Contracts workflow (#470)
- Add browser polyfills for Buffer/process needed by Privy/viem; scope
vite-plugin-node-polyfills to the client environment so SSR keeps
native node:stream.
- Short-circuit /.well-known/* in dev so Chrome DevTools probes
(e.g. /.well-known/appspecific/com.chrome.devtools.json) stop matching
the 3-segment flat dynamic route and crashing SSR with
BigInt('appspecific').
- Switch entry.server to renderToPipeableStream. renderToString left
React Router v7's internal Suspense boundaries unfinished, which made
<Scripts /> never run on the client and silently dropped all event
handlers (Login button click had no effect).
- Move ChakraProvider out of entry.{server,client} and widen the
in-tree ChakraProvider in root.tsx to also wrap SwitchNetwork. With
streaming SSR, the outer ChakraProvider was flushing global emotion
<style> tags before <html>, causing a hydration mismatch.
- biome: ignore generated **/.react-router and .claude/worktrees so the
pre-commit lint hook stops failing on auto-generated typegen output.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…te-migration fix(frontend): wallet connect & hydration after Vite migration
Removes @chakra-ui/react, @emotion/*, next-themes from the frontend and sets up Tailwind CSS v4 (+ @tailwindcss/vite), Shadcn-ready aliases, and the design tokens specified in #426 as a single editable source so future colour tweaks land in one place (`app/styles/globals.css`). The 77 files still importing layout primitives from `@chakra-ui/react` are mass-redirected to a transitional polyfill at `app/components/chakra-shim/` which renders plain HTML/Tailwind under Chakra-shaped names (Box, Flex, HStack, VStack, Text, Heading, Container, Stack, Grid, GridItem, Spinner, Skeleton, Icon, Image, Input, Textarea, NumberInput.*, Slider.* + useSlider, Tabs.*, List.{Root,Item}, Select.* + createListCollection, Collapsible.*, Portal, ClientOnly, AbsoluteCenter, AspectRatio, SimpleGrid, Float, Separator). Chakra style props are converted to inline `style`; theme-token props are silently dropped. Per #420's scope the goal is "doesn't crash" — visual parity is Phase 3 work. The shim has no @chakra-ui dependency. The five wrappers in `app/components/ui/` actually used outside their own folder (button, dialog, menu, checkbox, field) are reimplemented on @radix-ui/react-{dialog,dropdown-menu,slot} so the global Header workspace/user menus, SwitchNetwork dialog, roleAttributeDialog/, and CommonDialog continue working. The other ten Chakra-only wrappers (avatar/popover/tooltip/slider/radio/color-mode/drawer/input-group/ close-button/provider) had no external callers and are deleted. `app/styles/globals.css` defines every brand colour, radius, and shadow as a `:root` CSS variable and re-exposes them via `@theme inline`, so Tailwind utilities (`bg-primary`, `rounded-md`, `shadow-1`, ...) and the Shadcn semantic aliases (`--background`, `--primary`, ...) both pull from the same source. Retuning the palette is a one-file edit. Follow-up: #473 tracks shrinking the shim's import count to zero across Phase 3 and removing the directory. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(frontend): swap Chakra UI for Tailwind v4 + Shadcn baseline (#420)
Set up Ladle so Phase 2 design-system primitives can be developed and reviewed in isolation. Uses a dedicated `vite.ladle.config.ts` that omits the React Router plugin so Ladle can resolve stories without an `app/root.tsx` route entry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(frontend): introduce Ladle for UI component catalog (#475)
Adds HatsQuestModule template and quest entities so the frontend can query workspace quests, per-attempt submission history, approvals, and escrowed RoleShare totals. Also updates BigBang's Executed signature for the new hatsQuestModule address introduced in #467. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(subgraph): index HatsQuestModule events for quest lifecycle (#468)
Generate the full set of shadcn primitives that Phase 2-1 (#426) and Phase 2-2 (#427) will build on top of, replacing the Phase 1-2 transitional shims at app/components/ui/ where they collide. - Add: card, avatar, badge, input, textarea, skeleton, switch, radio-group, sheet, popover, dropdown-menu, tooltip, tabs, sonner, label - Overwrite Chakra-shaped shims with real shadcn versions: button, checkbox, dialog - Rewrite lucide-react imports in generated files to react-icons/lu so no second icon library is introduced - Update CommonButton to translate the Chakra-style props its callers still pass (size, w, bgColor, etc.) into shadcn-compatible className/style + asChild for as="label" - Migrate CommonDialog, SwitchNetwork, BaseRoleAttributeDialog to the new shadcn Dialog API (DialogRoot to Dialog, DialogActionTrigger to DialogClose, DialogBody to plain div) - Update splits.new and UserList Checkbox call sites for shadcn's onCheckedChange API - Drop unsupported height prop on DialogTrigger in EditRoleAttributeDialog - Refresh the Ladle Button story for the new variants/sizes field.tsx and menu.tsx remain as Phase 1-2 shims for now: the former has no shadcn equivalent (#427 introduces FieldLabel etc.) and the latter is still consumed by Header.tsx (proper migration to shadcn DropdownMenu happens in #427). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- react-i18next setup with ja/en namespaces, SSR Accept-Language detection, LocalStorage persistence via Zustand ui store, useLanguage hook - vite-plugin-pwa with autoUpdate, manifest (id/lang/display_override/categories), 192/512/maskable icons, apple-touch-icon and iOS meta tags - PWAUpdater registers SW via virtual:pwa-register (skips DEV) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(frontend): seed shadcn primitives in components/ui (#426 prep)
Re-styles the shadcn primitives in `app/components/ui/` to the Toban design tokens defined in `globals.css` and adds Ladle stories for every primitive so the catalog matches the spec in #426. - Button: 6 Toban variants (primary/soft/secondary/ghost/danger/dark) × 3 sizes (sm/md/lg) plus icon-only sizes and a `full` prop, all on a pill-radius base. - Card: rounded-md + shadow-1 (no left-edge accent — matches design feedback in `docs/design/handoff/chats/chat1.md`). - Badge: 6 status kinds (member/lead/supporter/role/info/danger). - Input/Textarea: optional leading `icon` prop and 48 px default height on the inline group. - Avatar: deterministic seed → palette colour with initials fallback, plus `xl` size. - Icon: new react-icons/lu wrapper that mirrors the design's icon names. - Self-host Inter / Noto Sans JP via @fontsource in `root.tsx`. - Add `@source` directives in `globals.css` so Ladle's separate Vite pipeline picks up the same utility classes the dev server generates. - Update `CommonButton` size shim and the dialog footer's example button to match the new Toban API. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(frontend): design tokens & atomic primitives (#426)
…cherMenu - Implemented onCreateWorkspace callback in WorkspaceSwitcherMenu and AppShellLayout to navigate to the new workspace creation page. - Updated WorkspaceSwitcherMenu stories to reflect the new workspace creation action.
…#539) Apply the ::after hit-target overlay globally to a[href] and button elements so member rows, date-range pickers, and other controls show a consistent pointer cursor over text in Safari and Brave. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace tab buttons with radio+label tabs and add a label ::after hit overlay plus a hover wrapper that forces body cursor, fixing Brave glyph hit-testing without breaking Safari or Chrome. Co-authored-by: Cursor <cursoragent@cursor.com>
fix(frontend): プロファイル保存後にNamestone IDキャッシュを再取得する
fix(frontend): ワークスペース一覧に所有しているワークスペースを表示する
…ursor-pointer fix(frontend): インタラクティブ要素のホバー時カーソルを 指(pointer) に統一 (#539)
…tcher-create feat(frontend): ワークスペース切替メニューから新規作成へ遷移 (#541)
react / react-dom / @types/react / @types/react-dom を ^19.2.0 に bump。 公式 React 19 Upgrade Guide に沿って破壊的変更を確認し、該当コードは なし(ReactDOM.render/hydrate/findDOMNode/文字列ref/propTypes/ defaultProps/useFormState はいずれも未使用、entry.client は既に hydrateRoot 使用)。forwardRef は React 19 でも有効なため据え置き。 Privy(^18||^19) など主要ピアの React 19 対応を確認。typecheck パス。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tion chore(frontend): React 18 → 19 への移行 (#464)
…ataUri) issue #532. Unify quest metadata storage with Hats by switching the on-chain field from `bytes32 metadataHash` to `string metadataUri` (`ipfs://<cid>`), so the subgraph can extract the CID without AS-side base32/CID reconstruction. - contract: Quest struct / createQuest / QuestCreated event now use `string metadataUri`; tests updated to ipfs:// strings. - subgraph: specVersion 0.0.5, file/ipfs template, QuestMetadata entity + Quest.metadata link, handleQuestCreated spawns QuestMetadataTemplate, new questMetadataMapping.ts parses title/description from IPFS JSON. apiVersion unified to 0.0.7 (Goldsky single-version requirement). - frontend: prefer indexed quest.metadata, fall back to IPFS gateway; upload returns ipfs:// URI; remove now-unused utils/cid.ts. - deploy: scripts/deploy/swapQuestModuleImpl.ts targets the new impl onto the existing BigBang via setHatsQuestModuleImpl (Sepolia). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
No logic changes — biome organizeImports + line wrapping on identity extension and two frontend routes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…a-file-ds feat(subgraph+frontend): index quest metadata via File Data Sources (string metadataUri) (#532)
Poll workspace mints for up to 30s after a successful send so the home activity feed updates once Goldsky indexes the mint, without constant polling. Co-authored-by: Cursor <cursoragent@cursor.com>
…ling activity after thanks token send Updated the polling mechanism to utilize the Goldsky client instead of the Apollo client, ensuring efficient updates to the activity feed following a successful thanks token send.
… functionality - Introduced a new story for the TreatEmojiSlider component to demonstrate a sendable cap under 5, allowing for ±1 adjustments or tap-to-input. - Enhanced the TreatEmojiSlider with new state management for editing, including input handling and repeat press functionality for incrementing and decrementing values. - Updated the icon registry to include a minus icon for the slider controls. - Adjusted layout styles for better responsiveness in the ComposeStep component.
…cessibility - Introduced a new story for the TreatEmojiSlider component with an initial value of 0, showcasing the slider hint caption. - Enhanced the slider's filled portion to remove width transition for smoother dragging experience. - Added a caption for better accessibility, which is conditionally visible based on the slider's value and disabled state.
…refresh feat(frontend): サンクストークン送信後に「最近のアクティビティ」を自動更新 (#534)
…mount feat(frontend): サンクストークン送付の送る量 UI を改善 (#546)
`submitCompletion` を `submitCompletion(address submitter, uint256 questId, uint256 membershipHatId)` に変更し、questAgentHat を装着した信頼エージェント (Discord bot)がメンバー本人の名義で申請できるようにする。 contract - submitter == address(0) → 従来どおり msg.sender(フロント直叩きの自己申請) - submitter != address(0) → msg.sender が questAgentHat 装着者であることを要求 (NotQuestAgent)。actor 自身も実在メンバーであることを別途検証するため、 エージェントでも非メンバーの名義では申請できない - エージェントが自分を submitter に指定するのは禁止(AgentCannotSelfSubmit)。 bot は他メンバーの同意を中継する役で、escrow の受益者にはなれない - BigBang が operatorHat 配下に questAgentHat を作成(mint はしない=ワーク スペース単位のオプトイン)。maxSupply=1 で信頼署名者を単一 bot に限定し、 複数装着者による共謀を不可能にする - Executed イベントに questAgentHatId を追加 subgraph - Workspace.questAgentHatId を追加(Executed から索引) - 申請の索引(CompletionSubmitted)は不変。actor が submitter として記録される frontend - Discord 設定画面に questAgentHat の付与/剥奪 UI(settings の AuthorityList と 同じ useHats ミューテーションを再利用し、bot 単一対象のトグルに特化) - 付与・剥奪は operatorHat / owner のみ可能なようボタンを活性制御 discord-bot - /quest submit(autocomplete で申請可能な Open クエストを提示) - Turnkey ポリシーを mintFrom 単独許可から 2 ブランチの disjunction に再構成し、 submitCompletion(0x947ec45f) を quest-module レジストリ・identity-bound な submitter に限定して許可。rate limit は操作ごとに分離 その他 - bigbang タスクの Executed ABI をアーティファクト由来に変更し、イベント署名の 変更でドリフトしないようにする Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
コントラクト→インデクサー→フロント→Cloudflare→Turnkey→Discord は一列に依存して おり、順序を間違えると静かに壊れる。手順が各パッケージに散っていたため、 docs/deployment.md に集約する。 docs/deployment.md(新規) - 依存グラフとネットワーク早見表(Sepolia / Base) - レイヤー別手順・検証チェックリスト - 実際に踏んだ地雷を「壊れる理由」として明文化: - sync:abis 忘れ → Executed の topic0 が変わりワークスペース作成が全滅する - identity Worker は discord-bot より先(service binding, error 10143) - Base は Sepolia とは別の Cloudflare アカウント - subgraph のイベント署名変更は旧イベントを二度と索引できなくする - startBlock は全 data source 共通のグローバル値 - Turnkey ポリシーは手動適用。レジストリに登録するのは impl でなくクローン wrangler / scripts を実態に合わせる - 稼働中の Sepolia スタックは top-level 設定(toban-discord-bot / toban-identity) だったため、未使用かつ service binding が壊れていた [env.sepolia] を削除。 Sepolia = top-level、Base = --env base に統一 - 素の `deploy` スクリプトを廃止(`pnpm --filter <pkg> deploy` は pnpm ビルトイン と衝突し ERR_PNPM_INVALID_DEPLOY_TARGET になる)。deploy:sepolia / deploy:base のみにする その他 - upgrade:BigBang がモック(BigBang_Mock_v2)に固定されていたのを実 BigBang に - README のコントラクトアドレス表を現在値に更新し、一次情報は outputs/contracts-<net>.json であることを明記 - Sepolia/Base への再デプロイ結果を outputs に反映 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
deploy:base が Sepolia のアカウントに向いて D1 not found (10181) で失敗する事象を 受けて、ネットワーク間のアカウント切り替え手順と症状→原因の対応表を追記する。 - CLOUDFLARE_ACCOUNT_ID を export したまま別ネットワークを触ると片方に固定される ため、使ったら unset する旨を明記 - 10181 / 10143 / 10000 はいずれもアカウント違いで出うることを表にする - deploy:base で必ず出る "vars.HATS_GRAPHQL_ENDPOINT exists at the top level" 警告は意図どおりであり、警告に従って [env.base.vars] に追記すると平文 var が secret を上書きして壊れることを wrangler.toml とドキュメント双方に明記 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Base 用の Worker/D1 が別 Cloudflare アカウント(yuki-021423)前提の設定になって おり、Sepolia のアカウントから deploy:base すると D1 not found (10181) で失敗して いた。運用アカウントを一本化する。 - Base 用 D1 `toban-identity-base` を Sepolia と同一アカウントに新規作成し、 discord-bot / identity 双方の [env.base] を新しい database_name / database_id に更新(D1 名はアカウント内で一意である必要があるため -base 接尾辞) - Base と Sepolia で D1 は分けたまま維持する。platform_links は guild -> treeId を 持ち treeId はチェーン固有なので、共有すると Sepolia のテストデータが Base 本番 に混ざる - [env.base] の workers.dev URL を統合先アカウントのサブドメインに更新 - db:migrate:remote:base を新 D1 名に追随させ、マイグレーション適用済み - 「Base は別アカウント」という前提で書いていたドキュメント(deployment.md / deploy-base-production.md / CLAUDE.md / wrangler.toml)を実態に合わせて修正し、 10143 / 10181 / 10000 の症状→原因表を整理 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
VITE_IDENTITY_WORKER_URL と VITE_DISCORD_BOT_SIGNER_ADDRESS が .env.example に
記載されておらず、Base の .env.base で両方とも設定漏れになっていた。
特に VITE_DISCORD_BOT_SIGNER_ADDRESS が無いと、Discord 設定画面
(/{treeId}/discord-bot)が「未設定です」の表示で止まり、questAgentHat の付与 UI が
一切使えない。どちらもネットワークごとに値が異なるため、sepolia / base の値を
コメントで併記する。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`ssrPolyfillShims` returned its alias from the global `config()` hook, which `applyToEnvironment` does not gate. The SSR-only alias leaked into the client/PWA build, redirecting the injected polyfill import to `ssr-buffer.ts` → `node:buffer`, which externalizes to `__vite-browser-external` (no `Buffer` export) and broke `pnpm frontend build` (Vercel deploy and local alike). Redirect via the `resolveId` hook instead: it is gated by `applyToEnvironment`, so the Node-builtin-backed shims apply only to the SSR build and never reach the client/PWA bundle. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ユースケースカードを実際の記事へのリンク+OGPサムネイルに差し替え - 各記事の OGP 画像を public/images/lp/cases/ にミラー - フッターから YouTube(Demo Video) 関連リンクを削除 - フッター「サイト」からワークスペース作成リンクを削除 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 全ルートに適用される root の meta に og:*/twitter:* を追加 - 共通 OGP 画像を public/images/ogp.jpg として配置(絶対 URL は toban.xyz 基準) - あわせて未設定だった description メタも追加 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v3.toban.xyz から toban.xyz へ。/toban-link のホスト検証・connect URL 生成・インストール後リダイレクトなど、この env 変数を起点とする全 URL に反映。 反映には deploy:base での再デプロイが必要。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
概要
v3ブランチをmainにマージする、Toban の大規模リニューアル一式です。フロントエンドの技術スタック刷新・デザインシステム導入・全画面リニューアルに加え、新しいコントラクト機能、サブグラフ拡張、外部連携(Discord bot / identity)を含みます。mainはv3に対して 0 behind(このブランチがmainを完全に含むため、コンフリクトなくマージ可能)主な変更
フロントエンド基盤の刷新
react-toastifyを廃止しsonnerに統一デザインシステム & 全画面リニューアル
Heading/Typographyプリミティブ導入と全リニューアル画面への適用([Phase 3] Heading / Typography プリミティブの導入と既存刷新済みコードへの移行 #491)AppShellを root に統合し旧 Header を撤去([Phase 2-4] AppShell を root.tsx に統合し legacy Header を退役 #484)機能追加
approveMint/permitMint/mintFrom)(feat(contract): ThanksToken に mint allowance(approveMint / permitMint / mintFrom)を追加 #506)コントラクト / サブグラフ
HatsQuestModule(trustless な RoleShare 分配、提出の取り下げ/却下対応)(RoleShare をトラストレスに分配する HatsQuestModule の実装 #417)外部連携(extensions)
@toban/identity:Discord provider、EIP-1271/6492 署名検証、Cloudflare Worker エントリ(feat(extensions): identity パッケージ — provider 抽象化されたアカウント連携基盤 #507)@toban/discord-bot:Turnkey signer による TEE ポリシーゲート署名、/connect/discord連携、Base デプロイ runbook(feat(extensions): discord-bot — Cloudflare Workers + D1 で Discord 統合 #508)インフラ / ドキュメント
docs/deployment.mdに体系化、Cloudflare 環境を Sepolia と同一アカウントに統合マージ方針・注意点
docs/deployment.md参照)。特にコントラクト変更に伴うsync:abis→ サブグラフ → frontend codegen の順序に注意。確認したいこと
outputs/(review.md/TARGET_INFO.json/BUG_BOUNTY_SCOPE.json)や.speca/session.jsonなど作業用と思われるファイルが含まれています。意図的でなければマージ前に除外を検討してください。🤖 Generated with Claude Code