@sei-js/create-sei 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.rsyncignore CHANGED
@@ -2,8 +2,6 @@ node_modules/
2
2
  .next/
3
3
  dist/
4
4
  build/
5
- .yarn/
6
- yarn.lock
7
5
  package-lock.json
8
6
  .git/
9
7
  .DS_Store
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @sei-js/create-sei-app
2
2
 
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 2666156: Harden the workspace against the 2026-07-14 "Miasma RAT" AsyncAPI supply-chain incident by pinning `@asyncapi/*` packages to non-compromised versions via root `pnpm.overrides`.
8
+
9
+ This stops a fresh install or lockfile regeneration from floating `@asyncapi/specs` up into the compromised `6.11.2` through the `mint` docs toolchain (`mint` → `@asyncapi/parser`). Resolved change: `@asyncapi/specs` `6.10.0` → `6.11.1`; `@asyncapi/generator`, `@asyncapi/generator-helpers`, and `@asyncapi/generator-components` are pinned preventively.
10
+
11
+ No shipped code or public API changes in this package — this is a repository/CI hardening release.
12
+
13
+ - 9168186: Improve the `next-template` runtime defaults generated by `create-sei`.
14
+
15
+ - Add a `prebuild` Biome check and include Biome in template dev dependencies.
16
+ - Configure Next.js to allow Sei CDN images and skip ESLint during builds.
17
+ - Update provider and shell setup for improved chain/image handling.
18
+ - Align template config/docs with current defaults (`.env.example`, `README`, Biome, Tailwind v4 config).
19
+
3
20
  ## 1.0.0
4
21
 
5
22
  ### Major Changes
@@ -1,6 +1,6 @@
1
1
  # Chain configuration
2
2
  # Options: mainnet, testnet, devnet
3
- # Defaults to testnet (atlantic-2) if not set
3
+ # Defaults to mainnet if not set; this example overrides it to testnet
4
4
  NEXT_PUBLIC_CHAIN=testnet
5
5
 
6
6
  # WalletConnect Project ID (optional)
@@ -1,3 +1 @@
1
- {
2
- "extends": "next/core-web-vitals"
3
- }
1
+ {}
@@ -4,17 +4,13 @@ This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next
4
4
 
5
5
  Install dependencies by running
6
6
  ```bash
7
- npm install
8
- #or
9
- yarn
7
+ bun install
10
8
  ```
11
9
 
12
10
  Then, run the development server:
13
11
 
14
12
  ```bash
15
- npm run dev
16
- # or
17
- yarn dev
13
+ bun run dev
18
14
  ```
19
15
 
20
16
  Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
@@ -1,7 +1,12 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
- "organizeImports": {
4
- "enabled": true
2
+ "$schema": "https://biomejs.dev/schemas/2.4.5/schema.json",
3
+ "root": true,
4
+ "assist": {
5
+ "actions": {
6
+ "source": {
7
+ "organizeImports": "on"
8
+ }
9
+ }
5
10
  },
6
11
  "linter": {
7
12
  "enabled": true,
@@ -20,8 +25,7 @@
20
25
  "formatWithErrors": false,
21
26
  "indentStyle": "tab",
22
27
  "lineEnding": "lf",
23
- "lineWidth": 160,
24
- "attributePosition": "auto"
28
+ "lineWidth": 160
25
29
  },
26
30
  "javascript": {
27
31
  "formatter": {
@@ -32,8 +36,12 @@
32
36
  "arrowParentheses": "always",
33
37
  "bracketSpacing": true,
34
38
  "bracketSameLine": false,
35
- "quoteStyle": "single",
36
- "attributePosition": "auto"
39
+ "quoteStyle": "double"
40
+ }
41
+ },
42
+ "css": {
43
+ "parser": {
44
+ "tailwindDirectives": true
37
45
  }
38
46
  },
39
47
  "json": {
@@ -42,7 +50,7 @@
42
50
  }
43
51
  },
44
52
  "files": {
45
- "include": ["src/**/*.ts", "src/**/*.tsx", "*.json", "*.md"],
53
+ "includes": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.css", "*.json", "*.md"],
46
54
  "ignore": ["node_modules/**", "dist/**", ".next/**", ".yarn/**"]
47
55
  }
48
56
  }
@@ -1,4 +1,17 @@
1
1
  /** @type {import('next').NextConfig} */
2
- const nextConfig = {};
2
+ const nextConfig = {
3
+ eslint: {
4
+ // Linting is handled by Biome — skip ESLint during builds.
5
+ ignoreDuringBuilds: true,
6
+ },
7
+ images: {
8
+ remotePatterns: [
9
+ {
10
+ protocol: "https",
11
+ hostname: "cdn.sei.io",
12
+ },
13
+ ],
14
+ },
15
+ };
3
16
 
4
17
  export default nextConfig;
@@ -4,6 +4,7 @@
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "dev": "next dev",
7
+ "prebuild": "biome check .",
7
8
  "build": "next build",
8
9
  "start": "next start",
9
10
  "lint": "biome lint .",
@@ -35,6 +36,7 @@
35
36
  "wagmi": "^2.16.4"
36
37
  },
37
38
  "devDependencies": {
39
+ "@biomejs/biome": "^2.4.5",
38
40
  "@types/node": "^24.3.0",
39
41
  "@types/react": "^19.1.10",
40
42
  "@types/react-dom": "^19.1.7",
@@ -1,14 +1,16 @@
1
+ @import "tailwindcss";
1
2
 
2
- @tailwind base;
3
- @tailwind components;
4
- @tailwind utilities;
3
+ @theme {
4
+ --color-sei-red: #9e1f19;
5
+ --color-sei-dark: #1a1a1a;
6
+ }
5
7
 
6
8
  @layer base {
7
- html {
8
- @apply h-full;
9
- }
10
-
11
- body {
12
- @apply h-full bg-gray-50 text-gray-900 antialiased;
13
- }
9
+ html {
10
+ @apply h-full;
11
+ }
12
+
13
+ body {
14
+ @apply h-full bg-gray-50 text-gray-900 antialiased;
15
+ }
14
16
  }
@@ -21,33 +21,81 @@ export default function Landing() {
21
21
 
22
22
  {/* Tech Stack Badges */}
23
23
  <Group gap="xs" mt="sm">
24
- <Badge variant="light" color="blue" style={{ backgroundColor: 'rgb(239 246 255)', color: 'rgb(29 78 216)', border: '1px solid rgb(191 219 254)' }}>
24
+ <Badge
25
+ variant="light"
26
+ color="blue"
27
+ style={{
28
+ backgroundColor: 'rgb(239 246 255)',
29
+ color: 'rgb(29 78 216)',
30
+ border: '1px solid rgb(191 219 254)',
31
+ }}
32
+ >
25
33
  Next.js 14
26
34
  </Badge>
27
35
  <Badge
28
36
  variant="light"
29
37
  color="violet"
30
- style={{ backgroundColor: 'rgb(250 245 255)', color: 'rgb(109 40 217)', border: '1px solid rgb(196 181 253)' }}
38
+ style={{
39
+ backgroundColor: 'rgb(250 245 255)',
40
+ color: 'rgb(109 40 217)',
41
+ border: '1px solid rgb(196 181 253)',
42
+ }}
31
43
  >
32
44
  Mantine UI
33
45
  </Badge>
34
- <Badge variant="light" color="cyan" style={{ backgroundColor: 'rgb(236 254 255)', color: 'rgb(14 116 144)', border: '1px solid rgb(165 243 252)' }}>
46
+ <Badge
47
+ variant="light"
48
+ color="cyan"
49
+ style={{
50
+ backgroundColor: 'rgb(236 254 255)',
51
+ color: 'rgb(14 116 144)',
52
+ border: '1px solid rgb(165 243 252)',
53
+ }}
54
+ >
35
55
  Tailwind CSS
36
56
  </Badge>
37
- <Badge variant="light" color="yellow" style={{ backgroundColor: 'rgb(254 249 195)', color: 'rgb(161 98 7)', border: '1px solid rgb(254 240 138)' }}>
57
+ <Badge
58
+ variant="light"
59
+ color="yellow"
60
+ style={{
61
+ backgroundColor: 'rgb(254 249 195)',
62
+ color: 'rgb(161 98 7)',
63
+ border: '1px solid rgb(254 240 138)',
64
+ }}
65
+ >
38
66
  Biome
39
67
  </Badge>
40
68
  <Badge
41
69
  variant="light"
42
70
  color="orange"
43
- style={{ backgroundColor: 'rgb(255 247 237)', color: 'rgb(194 65 12)', border: '1px solid rgb(254 215 170)' }}
71
+ style={{
72
+ backgroundColor: 'rgb(255 247 237)',
73
+ color: 'rgb(194 65 12)',
74
+ border: '1px solid rgb(254 215 170)',
75
+ }}
44
76
  >
45
77
  RainbowKit
46
78
  </Badge>
47
- <Badge variant="light" color="teal" style={{ backgroundColor: 'rgb(240 253 250)', color: 'rgb(15 118 110)', border: '1px solid rgb(153 246 228)' }}>
79
+ <Badge
80
+ variant="light"
81
+ color="teal"
82
+ style={{
83
+ backgroundColor: 'rgb(240 253 250)',
84
+ color: 'rgb(15 118 110)',
85
+ border: '1px solid rgb(153 246 228)',
86
+ }}
87
+ >
48
88
  Wagmi + Viem
49
89
  </Badge>
50
- <Badge variant="light" color="dark" style={{ backgroundColor: 'rgb(249 250 251)', color: 'rgb(17 24 39)', border: '1px solid rgb(209 213 219)' }}>
90
+ <Badge
91
+ variant="light"
92
+ color="dark"
93
+ style={{
94
+ backgroundColor: 'rgb(249 250 251)',
95
+ color: 'rgb(17 24 39)',
96
+ border: '1px solid rgb(209 213 219)',
97
+ }}
98
+ >
51
99
  Vercel
52
100
  </Badge>
53
101
  </Group>
@@ -1,28 +1,47 @@
1
- 'use client';
1
+ "use client";
2
2
 
3
- import { MantineProvider } from '@mantine/core';
4
- import { Notifications } from '@mantine/notifications';
5
- import { RainbowKitProvider, connectorsForWallets, lightTheme } from '@rainbow-me/rainbowkit';
6
- import { metaMaskWallet } from '@rainbow-me/rainbowkit/wallets';
7
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
8
- import { type ReactNode, useMemo } from 'react';
9
- import { http, WagmiProvider, createConfig } from 'wagmi';
3
+ import { MantineProvider } from "@mantine/core";
4
+ import { Notifications } from "@mantine/notifications";
5
+ import { connectorsForWallets, lightTheme, RainbowKitProvider } from "@rainbow-me/rainbowkit";
6
+ import { metaMaskWallet } from "@rainbow-me/rainbowkit/wallets";
7
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
8
+ import { type ReactNode, useMemo } from "react";
9
+ import { createConfig, http, WagmiProvider } from "wagmi";
10
10
 
11
- import '@rainbow-me/rainbowkit/styles.css';
12
- import { sei, seiDevnet, seiTestnet } from 'viem/chains';
11
+ import "@rainbow-me/rainbowkit/styles.css";
12
+ import { defineChain } from "viem";
13
+ import { sei, seiTestnet } from "viem/chains";
14
+
15
+ const seiDevnet = defineChain({
16
+ id: 713715,
17
+ name: "Sei Devnet",
18
+ nativeCurrency: { name: "Sei", symbol: "SEI", decimals: 18 },
19
+ rpcUrls: {
20
+ default: {
21
+ http: ["https://evm-rpc-arctic-1.sei-apis.com"],
22
+ },
23
+ },
24
+ blockExplorers: {
25
+ default: {
26
+ name: "Seitrace",
27
+ url: "https://seitrace.com",
28
+ },
29
+ },
30
+ testnet: true,
31
+ });
13
32
 
14
33
  const queryClient = new QueryClient();
15
34
 
16
35
  const connectors = connectorsForWallets(
17
36
  [
18
37
  {
19
- groupName: 'Recommended',
38
+ groupName: "Recommended",
20
39
  wallets: [metaMaskWallet],
21
40
  },
22
41
  ],
23
42
  {
24
- appName: 'Sei dApp',
25
- projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || 'your-project-id',
43
+ appName: "Sei dApp",
44
+ projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || "your-project-id",
26
45
  }
27
46
  );
28
47
 
@@ -33,11 +52,11 @@ interface ProvidersProps {
33
52
  export default function Providers({ children }: ProvidersProps) {
34
53
  // Chain selection via environment variable, defaults to sei mainnet
35
54
  const getSelectedChain = () => {
36
- const chainName = process.env.NEXT_PUBLIC_CHAIN || 'mainnet';
55
+ const chainName = process.env.NEXT_PUBLIC_CHAIN || "mainnet";
37
56
  switch (chainName.toLowerCase()) {
38
- case 'testnet':
57
+ case "testnet":
39
58
  return seiTestnet;
40
- case 'devnet':
59
+ case "devnet":
41
60
  return seiDevnet;
42
61
  default:
43
62
  return sei;
@@ -68,14 +87,14 @@ export default function Providers({ children }: ProvidersProps) {
68
87
  <Notifications />
69
88
  <RainbowKitProvider
70
89
  theme={lightTheme({
71
- accentColor: '#9E1F19',
72
- accentColorForeground: 'white',
73
- borderRadius: 'medium',
74
- fontStack: 'system',
90
+ accentColor: "#9E1F19",
91
+ accentColorForeground: "white",
92
+ borderRadius: "medium",
93
+ fontStack: "system",
75
94
  })}
76
95
  appInfo={{
77
- appName: 'Sei dApp',
78
- learnMoreUrl: 'https://docs.sei.io/learn/wallets',
96
+ appName: "Sei dApp",
97
+ learnMoreUrl: "https://docs.sei.io/learn/wallets",
79
98
  }}
80
99
  modalSize="compact"
81
100
  initialChain={chain.id}
@@ -1,11 +1,12 @@
1
- 'use client';
1
+ "use client";
2
2
 
3
- import { ActionIcon, AppShell, Container, Group } from '@mantine/core';
4
- import { ConnectButton } from '@rainbow-me/rainbowkit';
5
- import { IconBook, IconCode, IconLogout } from '@tabler/icons-react';
6
- import Link from 'next/link';
7
- import type { PropsWithChildren } from 'react';
8
- import { useAccount, useDisconnect } from 'wagmi';
3
+ import { ActionIcon, AppShell, Container, Group } from "@mantine/core";
4
+ import { ConnectButton } from "@rainbow-me/rainbowkit";
5
+ import { IconBook, IconCode, IconLogout } from "@tabler/icons-react";
6
+ import Image from "next/image";
7
+ import Link from "next/link";
8
+ import type { PropsWithChildren } from "react";
9
+ import { useAccount, useDisconnect } from "wagmi";
9
10
 
10
11
  export default function Shell({ children }: PropsWithChildren) {
11
12
  const { address, isConnected } = useAccount();
@@ -17,7 +18,7 @@ export default function Shell({ children }: PropsWithChildren) {
17
18
  <Container size="xl" h="100%">
18
19
  <Group justify="space-between" align="center" h="100%">
19
20
  <Link href="/" aria-label="Sei">
20
- <img src="https://cdn.sei.io/assets/sei-icon.svg" alt="Sei" style={{ height: 28, display: 'block' }} />
21
+ <Image src="https://cdn.sei.io/assets/sei-icon.svg" alt="Sei" width={28} height={28} style={{ display: "block" }} />
21
22
  </Link>
22
23
  <Group align="center" gap="md">
23
24
  <ActionIcon
@@ -29,10 +30,10 @@ export default function Shell({ children }: PropsWithChildren) {
29
30
  radius="md"
30
31
  aria-label="View Resources"
31
32
  style={{
32
- transition: 'all 0.2s ease',
33
- '&:hover': {
34
- transform: 'translateY(-1px)',
35
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
33
+ transition: "all 0.2s ease",
34
+ "&:hover": {
35
+ transform: "translateY(-1px)",
36
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
36
37
  },
37
38
  }}
38
39
  >
@@ -47,10 +48,10 @@ export default function Shell({ children }: PropsWithChildren) {
47
48
  radius="md"
48
49
  aria-label="View Development Guide"
49
50
  style={{
50
- transition: 'all 0.2s ease',
51
- '&:hover': {
52
- transform: 'translateY(-1px)',
53
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
51
+ transition: "all 0.2s ease",
52
+ "&:hover": {
53
+ transform: "translateY(-1px)",
54
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
54
55
  },
55
56
  }}
56
57
  >
@@ -65,10 +66,10 @@ export default function Shell({ children }: PropsWithChildren) {
65
66
  onClick={() => disconnect()}
66
67
  aria-label="Disconnect Wallet"
67
68
  style={{
68
- transition: 'all 0.2s ease',
69
- '&:hover': {
70
- transform: 'translateY(-1px)',
71
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
69
+ transition: "all 0.2s ease",
70
+ "&:hover": {
71
+ transform: "translateY(-1px)",
72
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
72
73
  },
73
74
  }}
74
75
  >
@@ -1,17 +1,5 @@
1
+ // Tailwind v4 uses CSS-first configuration.
2
+ // Custom theme values are defined in src/app/globals.css via @theme.
3
+ // This file is kept as an empty config for compatibility.
1
4
  /** @type {import('tailwindcss').Config} */
2
- module.exports = {
3
- content: [
4
- './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
5
- './src/components/**/*.{js,ts,jsx,tsx,mdx}',
6
- './src/app/**/*.{js,ts,jsx,tsx,mdx}',
7
- ],
8
- theme: {
9
- extend: {
10
- colors: {
11
- 'sei-red': '#9E1F19',
12
- 'sei-dark': '#1a1a1a',
13
- },
14
- },
15
- },
16
- plugins: [],
17
- }
5
+ module.exports = {};
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "@sei-js/create-sei",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/sei-protocol/sei-js.git",
7
+ "directory": "packages/create-sei"
8
+ },
4
9
  "module": "dist/main.js",
5
10
  "type": "module",
6
11
  "bin": "./dist/main.js",
@@ -1,6 +1,6 @@
1
1
  # Chain configuration
2
2
  # Options: mainnet, testnet, devnet
3
- # Defaults to testnet (atlantic-2) if not set
3
+ # Defaults to mainnet if not set; this example overrides it to testnet
4
4
  NEXT_PUBLIC_CHAIN=testnet
5
5
 
6
6
  # WalletConnect Project ID (optional)
@@ -1,3 +1 @@
1
- {
2
- "extends": "next/core-web-vitals"
3
- }
1
+ {}
@@ -4,17 +4,13 @@ This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next
4
4
 
5
5
  Install dependencies by running
6
6
  ```bash
7
- npm install
8
- #or
9
- yarn
7
+ bun install
10
8
  ```
11
9
 
12
10
  Then, run the development server:
13
11
 
14
12
  ```bash
15
- npm run dev
16
- # or
17
- yarn dev
13
+ bun run dev
18
14
  ```
19
15
 
20
16
  Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
@@ -1,7 +1,12 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
- "organizeImports": {
4
- "enabled": true
2
+ "$schema": "https://biomejs.dev/schemas/2.4.5/schema.json",
3
+ "root": true,
4
+ "assist": {
5
+ "actions": {
6
+ "source": {
7
+ "organizeImports": "on"
8
+ }
9
+ }
5
10
  },
6
11
  "linter": {
7
12
  "enabled": true,
@@ -20,8 +25,7 @@
20
25
  "formatWithErrors": false,
21
26
  "indentStyle": "tab",
22
27
  "lineEnding": "lf",
23
- "lineWidth": 160,
24
- "attributePosition": "auto"
28
+ "lineWidth": 160
25
29
  },
26
30
  "javascript": {
27
31
  "formatter": {
@@ -32,8 +36,12 @@
32
36
  "arrowParentheses": "always",
33
37
  "bracketSpacing": true,
34
38
  "bracketSameLine": false,
35
- "quoteStyle": "single",
36
- "attributePosition": "auto"
39
+ "quoteStyle": "double"
40
+ }
41
+ },
42
+ "css": {
43
+ "parser": {
44
+ "tailwindDirectives": true
37
45
  }
38
46
  },
39
47
  "json": {
@@ -42,7 +50,7 @@
42
50
  }
43
51
  },
44
52
  "files": {
45
- "include": ["src/**/*.ts", "src/**/*.tsx", "*.json", "*.md"],
53
+ "includes": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.css", "*.json", "*.md"],
46
54
  "ignore": ["node_modules/**", "dist/**", ".next/**", ".yarn/**"]
47
55
  }
48
56
  }
@@ -1,4 +1,17 @@
1
1
  /** @type {import('next').NextConfig} */
2
- const nextConfig = {};
2
+ const nextConfig = {
3
+ eslint: {
4
+ // Linting is handled by Biome — skip ESLint during builds.
5
+ ignoreDuringBuilds: true,
6
+ },
7
+ images: {
8
+ remotePatterns: [
9
+ {
10
+ protocol: "https",
11
+ hostname: "cdn.sei.io",
12
+ },
13
+ ],
14
+ },
15
+ };
3
16
 
4
17
  export default nextConfig;
@@ -4,6 +4,7 @@
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "dev": "next dev",
7
+ "prebuild": "biome check .",
7
8
  "build": "next build",
8
9
  "start": "next start",
9
10
  "lint": "biome lint .",
@@ -35,6 +36,7 @@
35
36
  "wagmi": "^2.16.4"
36
37
  },
37
38
  "devDependencies": {
39
+ "@biomejs/biome": "^2.4.5",
38
40
  "@types/node": "^24.3.0",
39
41
  "@types/react": "^19.1.10",
40
42
  "@types/react-dom": "^19.1.7",
@@ -1,14 +1,16 @@
1
+ @import "tailwindcss";
1
2
 
2
- @tailwind base;
3
- @tailwind components;
4
- @tailwind utilities;
3
+ @theme {
4
+ --color-sei-red: #9e1f19;
5
+ --color-sei-dark: #1a1a1a;
6
+ }
5
7
 
6
8
  @layer base {
7
- html {
8
- @apply h-full;
9
- }
10
-
11
- body {
12
- @apply h-full bg-gray-50 text-gray-900 antialiased;
13
- }
9
+ html {
10
+ @apply h-full;
11
+ }
12
+
13
+ body {
14
+ @apply h-full bg-gray-50 text-gray-900 antialiased;
15
+ }
14
16
  }
@@ -21,33 +21,81 @@ export default function Landing() {
21
21
 
22
22
  {/* Tech Stack Badges */}
23
23
  <Group gap="xs" mt="sm">
24
- <Badge variant="light" color="blue" style={{ backgroundColor: 'rgb(239 246 255)', color: 'rgb(29 78 216)', border: '1px solid rgb(191 219 254)' }}>
24
+ <Badge
25
+ variant="light"
26
+ color="blue"
27
+ style={{
28
+ backgroundColor: 'rgb(239 246 255)',
29
+ color: 'rgb(29 78 216)',
30
+ border: '1px solid rgb(191 219 254)',
31
+ }}
32
+ >
25
33
  Next.js 14
26
34
  </Badge>
27
35
  <Badge
28
36
  variant="light"
29
37
  color="violet"
30
- style={{ backgroundColor: 'rgb(250 245 255)', color: 'rgb(109 40 217)', border: '1px solid rgb(196 181 253)' }}
38
+ style={{
39
+ backgroundColor: 'rgb(250 245 255)',
40
+ color: 'rgb(109 40 217)',
41
+ border: '1px solid rgb(196 181 253)',
42
+ }}
31
43
  >
32
44
  Mantine UI
33
45
  </Badge>
34
- <Badge variant="light" color="cyan" style={{ backgroundColor: 'rgb(236 254 255)', color: 'rgb(14 116 144)', border: '1px solid rgb(165 243 252)' }}>
46
+ <Badge
47
+ variant="light"
48
+ color="cyan"
49
+ style={{
50
+ backgroundColor: 'rgb(236 254 255)',
51
+ color: 'rgb(14 116 144)',
52
+ border: '1px solid rgb(165 243 252)',
53
+ }}
54
+ >
35
55
  Tailwind CSS
36
56
  </Badge>
37
- <Badge variant="light" color="yellow" style={{ backgroundColor: 'rgb(254 249 195)', color: 'rgb(161 98 7)', border: '1px solid rgb(254 240 138)' }}>
57
+ <Badge
58
+ variant="light"
59
+ color="yellow"
60
+ style={{
61
+ backgroundColor: 'rgb(254 249 195)',
62
+ color: 'rgb(161 98 7)',
63
+ border: '1px solid rgb(254 240 138)',
64
+ }}
65
+ >
38
66
  Biome
39
67
  </Badge>
40
68
  <Badge
41
69
  variant="light"
42
70
  color="orange"
43
- style={{ backgroundColor: 'rgb(255 247 237)', color: 'rgb(194 65 12)', border: '1px solid rgb(254 215 170)' }}
71
+ style={{
72
+ backgroundColor: 'rgb(255 247 237)',
73
+ color: 'rgb(194 65 12)',
74
+ border: '1px solid rgb(254 215 170)',
75
+ }}
44
76
  >
45
77
  RainbowKit
46
78
  </Badge>
47
- <Badge variant="light" color="teal" style={{ backgroundColor: 'rgb(240 253 250)', color: 'rgb(15 118 110)', border: '1px solid rgb(153 246 228)' }}>
79
+ <Badge
80
+ variant="light"
81
+ color="teal"
82
+ style={{
83
+ backgroundColor: 'rgb(240 253 250)',
84
+ color: 'rgb(15 118 110)',
85
+ border: '1px solid rgb(153 246 228)',
86
+ }}
87
+ >
48
88
  Wagmi + Viem
49
89
  </Badge>
50
- <Badge variant="light" color="dark" style={{ backgroundColor: 'rgb(249 250 251)', color: 'rgb(17 24 39)', border: '1px solid rgb(209 213 219)' }}>
90
+ <Badge
91
+ variant="light"
92
+ color="dark"
93
+ style={{
94
+ backgroundColor: 'rgb(249 250 251)',
95
+ color: 'rgb(17 24 39)',
96
+ border: '1px solid rgb(209 213 219)',
97
+ }}
98
+ >
51
99
  Vercel
52
100
  </Badge>
53
101
  </Group>
@@ -1,28 +1,47 @@
1
- 'use client';
1
+ "use client";
2
2
 
3
- import { MantineProvider } from '@mantine/core';
4
- import { Notifications } from '@mantine/notifications';
5
- import { RainbowKitProvider, connectorsForWallets, lightTheme } from '@rainbow-me/rainbowkit';
6
- import { metaMaskWallet } from '@rainbow-me/rainbowkit/wallets';
7
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
8
- import { type ReactNode, useMemo } from 'react';
9
- import { http, WagmiProvider, createConfig } from 'wagmi';
3
+ import { MantineProvider } from "@mantine/core";
4
+ import { Notifications } from "@mantine/notifications";
5
+ import { connectorsForWallets, lightTheme, RainbowKitProvider } from "@rainbow-me/rainbowkit";
6
+ import { metaMaskWallet } from "@rainbow-me/rainbowkit/wallets";
7
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
8
+ import { type ReactNode, useMemo } from "react";
9
+ import { createConfig, http, WagmiProvider } from "wagmi";
10
10
 
11
- import '@rainbow-me/rainbowkit/styles.css';
12
- import { sei, seiDevnet, seiTestnet } from 'viem/chains';
11
+ import "@rainbow-me/rainbowkit/styles.css";
12
+ import { defineChain } from "viem";
13
+ import { sei, seiTestnet } from "viem/chains";
14
+
15
+ const seiDevnet = defineChain({
16
+ id: 713715,
17
+ name: "Sei Devnet",
18
+ nativeCurrency: { name: "Sei", symbol: "SEI", decimals: 18 },
19
+ rpcUrls: {
20
+ default: {
21
+ http: ["https://evm-rpc-arctic-1.sei-apis.com"],
22
+ },
23
+ },
24
+ blockExplorers: {
25
+ default: {
26
+ name: "Seitrace",
27
+ url: "https://seitrace.com",
28
+ },
29
+ },
30
+ testnet: true,
31
+ });
13
32
 
14
33
  const queryClient = new QueryClient();
15
34
 
16
35
  const connectors = connectorsForWallets(
17
36
  [
18
37
  {
19
- groupName: 'Recommended',
38
+ groupName: "Recommended",
20
39
  wallets: [metaMaskWallet],
21
40
  },
22
41
  ],
23
42
  {
24
- appName: 'Sei dApp',
25
- projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || 'your-project-id',
43
+ appName: "Sei dApp",
44
+ projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || "your-project-id",
26
45
  }
27
46
  );
28
47
 
@@ -33,11 +52,11 @@ interface ProvidersProps {
33
52
  export default function Providers({ children }: ProvidersProps) {
34
53
  // Chain selection via environment variable, defaults to sei mainnet
35
54
  const getSelectedChain = () => {
36
- const chainName = process.env.NEXT_PUBLIC_CHAIN || 'mainnet';
55
+ const chainName = process.env.NEXT_PUBLIC_CHAIN || "mainnet";
37
56
  switch (chainName.toLowerCase()) {
38
- case 'testnet':
57
+ case "testnet":
39
58
  return seiTestnet;
40
- case 'devnet':
59
+ case "devnet":
41
60
  return seiDevnet;
42
61
  default:
43
62
  return sei;
@@ -68,14 +87,14 @@ export default function Providers({ children }: ProvidersProps) {
68
87
  <Notifications />
69
88
  <RainbowKitProvider
70
89
  theme={lightTheme({
71
- accentColor: '#9E1F19',
72
- accentColorForeground: 'white',
73
- borderRadius: 'medium',
74
- fontStack: 'system',
90
+ accentColor: "#9E1F19",
91
+ accentColorForeground: "white",
92
+ borderRadius: "medium",
93
+ fontStack: "system",
75
94
  })}
76
95
  appInfo={{
77
- appName: 'Sei dApp',
78
- learnMoreUrl: 'https://docs.sei.io/learn/wallets',
96
+ appName: "Sei dApp",
97
+ learnMoreUrl: "https://docs.sei.io/learn/wallets",
79
98
  }}
80
99
  modalSize="compact"
81
100
  initialChain={chain.id}
@@ -1,11 +1,12 @@
1
- 'use client';
1
+ "use client";
2
2
 
3
- import { ActionIcon, AppShell, Container, Group } from '@mantine/core';
4
- import { ConnectButton } from '@rainbow-me/rainbowkit';
5
- import { IconBook, IconCode, IconLogout } from '@tabler/icons-react';
6
- import Link from 'next/link';
7
- import type { PropsWithChildren } from 'react';
8
- import { useAccount, useDisconnect } from 'wagmi';
3
+ import { ActionIcon, AppShell, Container, Group } from "@mantine/core";
4
+ import { ConnectButton } from "@rainbow-me/rainbowkit";
5
+ import { IconBook, IconCode, IconLogout } from "@tabler/icons-react";
6
+ import Image from "next/image";
7
+ import Link from "next/link";
8
+ import type { PropsWithChildren } from "react";
9
+ import { useAccount, useDisconnect } from "wagmi";
9
10
 
10
11
  export default function Shell({ children }: PropsWithChildren) {
11
12
  const { address, isConnected } = useAccount();
@@ -17,7 +18,7 @@ export default function Shell({ children }: PropsWithChildren) {
17
18
  <Container size="xl" h="100%">
18
19
  <Group justify="space-between" align="center" h="100%">
19
20
  <Link href="/" aria-label="Sei">
20
- <img src="https://cdn.sei.io/assets/sei-icon.svg" alt="Sei" style={{ height: 28, display: 'block' }} />
21
+ <Image src="https://cdn.sei.io/assets/sei-icon.svg" alt="Sei" width={28} height={28} style={{ display: "block" }} />
21
22
  </Link>
22
23
  <Group align="center" gap="md">
23
24
  <ActionIcon
@@ -29,10 +30,10 @@ export default function Shell({ children }: PropsWithChildren) {
29
30
  radius="md"
30
31
  aria-label="View Resources"
31
32
  style={{
32
- transition: 'all 0.2s ease',
33
- '&:hover': {
34
- transform: 'translateY(-1px)',
35
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
33
+ transition: "all 0.2s ease",
34
+ "&:hover": {
35
+ transform: "translateY(-1px)",
36
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
36
37
  },
37
38
  }}
38
39
  >
@@ -47,10 +48,10 @@ export default function Shell({ children }: PropsWithChildren) {
47
48
  radius="md"
48
49
  aria-label="View Development Guide"
49
50
  style={{
50
- transition: 'all 0.2s ease',
51
- '&:hover': {
52
- transform: 'translateY(-1px)',
53
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
51
+ transition: "all 0.2s ease",
52
+ "&:hover": {
53
+ transform: "translateY(-1px)",
54
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
54
55
  },
55
56
  }}
56
57
  >
@@ -65,10 +66,10 @@ export default function Shell({ children }: PropsWithChildren) {
65
66
  onClick={() => disconnect()}
66
67
  aria-label="Disconnect Wallet"
67
68
  style={{
68
- transition: 'all 0.2s ease',
69
- '&:hover': {
70
- transform: 'translateY(-1px)',
71
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
69
+ transition: "all 0.2s ease",
70
+ "&:hover": {
71
+ transform: "translateY(-1px)",
72
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
72
73
  },
73
74
  }}
74
75
  >
@@ -1,17 +1,5 @@
1
+ // Tailwind v4 uses CSS-first configuration.
2
+ // Custom theme values are defined in src/app/globals.css via @theme.
3
+ // This file is kept as an empty config for compatibility.
1
4
  /** @type {import('tailwindcss').Config} */
2
- module.exports = {
3
- content: [
4
- './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
5
- './src/components/**/*.{js,ts,jsx,tsx,mdx}',
6
- './src/app/**/*.{js,ts,jsx,tsx,mdx}',
7
- ],
8
- theme: {
9
- extend: {
10
- colors: {
11
- 'sei-red': '#9E1F19',
12
- 'sei-dark': '#1a1a1a',
13
- },
14
- },
15
- },
16
- plugins: [],
17
- }
5
+ module.exports = {};