Files
explore/cspell.jsonc
T
zeekay 5e30074537 wip: scaffold Vite 8 + React 19 SPA under vite/ — Next.js port blocked
The existing Next.js app (99 pages, 427 next/* imports, 177 files using
next/router, 154 using nextjs-routes types, 105 using getServerSideProps) is
far too coupled to rewrite in one pass. A full migration is ~2–4 weeks of
mechanical work.

This commit adds the scaffold only:

  vite/package.json      — Vite 8 + React 19.2 + wouter, no Next deps
  vite/vite.config.ts    — aliases at ../lib, ../ui, ../configs, … so source
                           migrates file-by-file instead of moving
  vite/tsconfig.json     — mirrors the aliases for TypeScript
  vite/index.html        — security headers as <meta> (was nextjs/headers.js)
  vite/src/main.tsx      — React 19 root bootstrap
  vite/src/env.ts        — runtime envs: window.__envs first, import.meta.env
                           fallback, maps NEXT_PUBLIC_API_HOST → VITE_API_BASE_URL
  vite/src/redirects.ts  — full port of nextjs/redirects.js (69 client rules)
  vite/src/App.tsx       — wouter router with CatchAll redirect resolver
  vite/Dockerfile        — 2-stage → ghcr.io/hanzoai/spa
  vite/LLM.md            — what's done, what's left, how to finish

The production Dockerfile at ../Dockerfile still builds the Next.js app. This
scaffold is independent; nothing in the existing tree is deleted or moved.

See vite/LLM.md for the full migration plan and 9 critical TODOs before this
can replace the Next.js build.
2026-04-19 00:05:37 -07:00

316 lines
6.1 KiB
JSON

{
// Version of the setting file. Always 0.2
"version": "0.2",
// language - current active spelling language
"language": "en",
"useGitignore": true,
"ignorePaths": [
"**/*.svg",
"**/*.sfd",
".git",
"mocks/zetaChain/zetaChainCCTX.ts",
"mocks/metadata/address.ts",
"playwright/mocks/file_mock_with_very_long_name.json",
"playwright/fixtures/rewards.ts",
"public/static/capybara/index.js",
"ui/showcases/utils.ts",
"ui/tx/TxExternalTxs.pw.tsx",
"pnpm-lock.yaml",
".cspell-words.txt"
],
"enableGlobDot": true,
"ignoreRandomStrings": true,
"allowCompoundWords": true,
"ignoreRegExpList": [
// Ignore filecoin f410f-like native addresses
"f410f[a-z2-7]{39}",
// Specify publisher key
"spk_\\w+",
// Insights project key
"phc_\\w+",
// GitHub account names
"@(\\w|-)+"
],
// words - list of words to be always considered correct
"words": [
"aatx",
"hanzoai",
"abfnrtv",
"abitype",
"AIVM",
"allvms",
"abkw",
"ACMRT",
"achain",
"bchain",
"adbutler",
"addrs",
"adsbyslise",
"aeiou",
"Ahrefs",
"airtable",
"Alexa",
"alfajores",
"andb",
"anyblock",
"anytrust",
"apng",
"apos",
"appkit",
"Applebot",
"Arianee",
"ARTIS",
"astar",
"asymp",
"autoscout",
"Baiduspider",
"barooumba",
"basehead",
"bech",
"bedag",
"bingbot",
"bitquery",
"blackfort",
"blockie",
"blockies",
"blockscout",
"buildx",
"callvalue",
"campnetwork",
"CCIP",
"cctx",
"cctxs",
"celenium",
"celestia",
"CERC",
"cfasync",
"chainid",
"chainscout",
"chakra",
"clstr",
"coinzilla",
"coinzillatag",
"commitish",
"Computor",
"contentscript",
"contractname",
"convictional",
"Couldn",
"crios",
"dappscout",
"dbaeumer",
"dchain",
"deepdao",
"defi",
"devnet",
"didn",
"doesn",
"doctl",
"DOKS",
"dotenv",
"DRPC",
"DTEND",
"duckduckgo",
"eamodio",
"Eigenda",
"Emelyanov",
"Enkrypt",
"explorable",
"facebookexternalhit",
"favicons",
"filecoin",
"flashblock",
"flashblocks",
"foos",
"fxios",
"geas",
"giga",
"gitpoap",
"Googlebot",
"goriunov",
"gotmpl",
"grecaptcha",
"growthbook",
"gstatic",
"Hanzo",
"hairsp",
"healthz",
"helia",
"hyfi",
"ICTT",
"identicons",
"IERC",
"Ihnatsyeu",
"Inde",
"inpage",
"internaltx",
"ipfs",
"iszero",
"jazzicon",
"jfif",
"jumpdest",
"jumpi",
"keccak",
"Kiryl",
"labelable",
"laquo",
"libc",
"libp",
"Liquality",
"llms",
"lokijs",
"LUKSO",
"luxd",
"luxfi",
"nanoLux",
"mainnets",
"megaeth",
"merkle",
"metasuites",
"mgas",
"mload",
"mmss",
"msize",
"mulmod",
"multiarch",
"multicall",
"multichain",
"multisend",
"nbdash",
"NCAABB",
"ndash",
"negb",
"nextjs",
"noopener",
"noreferrer",
"noves",
"numine",
"nums",
"okex",
"okhttp",
"opblock",
"opengraph",
"orderbook",
"paych",
"pchain",
"PCHAIN",
"CCHAIN",
"peekers",
"pino",
"pjpeg",
"insights",
"procs",
"PWDEBUG",
"pwstory",
"pyftsubset",
"Qwen",
"qrcode",
"rabby",
"raleway",
"randao",
"raquo",
"rari",
"Rarible",
"RBTC",
"rdns",
"rdparty",
"regcred",
"remasc",
"reown",
"resizer",
"rgba",
"RIPEMD",
"rlespinasse",
"rogerbot",
"rollbar",
"ROLLUP",
"rollups",
"rubic",
"Sastana",
"",
"schnorr",
"screencasts",
"scure",
"sdiv",
"SEMRESATTRS",
"Semrush",
"servedbyadbutler",
"sevio",
"sevioads",
"Shavuha",
"Shavukha",
"shibarium",
"shibariumscan",
"SHVKH",
"sidechain",
"Signatur",
"simonsiefke",
"siwe",
"slise",
"sload",
"smartmuv",
"smod",
"smol",
"sokol",
"solidityscan",
"Sourcify",
"Succ",
"superchain",
"tabler",
"teleporter",
"TBXN",
"testnetv",
"thinsp",
"Tokenary",
"tokenpocket",
"tokentxns",
"tonumber",
"trustwallet",
"Twitterbot",
"txns",
"typegen",
"uidotdev",
"unfinalized",
"UNKN",
"unparse",
"unstaked",
"usehooks",
"utia",
"utka",
"utko",
"utxos",
"UUPS",
"VCALENDAR",
"vercel",
"verifreg",
"VEVENT",
"viem",
"vitalik",
"vite",
"vitest",
"wagmi",
"warpcast",
"watchlist",
"webacy",
"Winky",
"wouter",
"WOWG",
"WPOA",
"xdai",
"XDEFI",
"xname",
"xstar",
"yatki",
"zerion",
"zerossl",
"zetachain",
"zetavaloper",
"zilliqa",
"zkevm",
"zksolc",
"zksync",
"ZKVM",
"zora"
]
}