diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..f86f1d1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,16 @@ +## Summary + + + +## Changes + +- + +## Verification + +- [ ] `npm run typecheck` +- [ ] `npm run format:check` + +## Notes + + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..091208a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,32 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + - dev + +jobs: + checks: + name: TypeScript and format + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: TypeScript check + run: npm run typecheck + + - name: Format check + run: npm run format:check diff --git a/README.md b/README.md index 9b0e8c5..939022e 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,11 @@ The frontend connects directly to the Shade smart contracts and backend services ## Tech Stack +- Next.js - React - TypeScript -- Web3 / Wallet integrations +- Tailwind CSS +- Stellar wallet integrations - Smart contract interaction - REST APIs for off-chain services @@ -47,8 +49,36 @@ Clone the repository: git clone https://github.com//shade-dapp-frontend.git cd shade-dapp-frontend ``` -## Install dependencies -```npm install``` -## Install dependencies -```npm run dev``` +Install dependencies: + +```bash +npm install +``` + +Start the development server: + +```bash +npm run dev +``` + +Run checks: + +```bash +npm run typecheck +npm run format:check +``` + +Format files: + +```bash +npm run format +``` + +## Contributing + +1. Create a branch from `main`. +2. Keep changes focused on one task or bug fix. +3. Run `npm run typecheck` and `npm run format:check` before opening a pull request. +4. Fill out the pull request template with a short summary, verification steps, and any notes. +5. Request review after CI passes. diff --git a/package-lock.json b/package-lock.json index a84a6e2..21b02d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.3.1", + "prettier": "^3.8.3", "tailwindcss": "^4", "tw-animate-css": "^1.3.8", "typescript": "^5" @@ -12976,6 +12977,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/package.json b/package.json index 97b18d5..9bd8753 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,10 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "typecheck": "tsc --noEmit", + "format": "prettier --write .", + "format:check": "prettier --check ." }, "dependencies": { "@creit.tech/stellar-wallets-kit": "^2.0.0", @@ -17,21 +20,22 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.544.0", + "next": "15.3.1", "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.3.1", "tailwind-merge": "^3.3.1" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", - "tw-animate-css": "^1.3.8", "eslint": "^9", "eslint-config-next": "15.3.1", - "@eslint/eslintrc": "^3" + "prettier": "^3.8.3", + "tailwindcss": "^4", + "tw-animate-css": "^1.3.8", + "typescript": "^5" } } diff --git a/src/app/register/register-client.tsx b/src/app/register/register-client.tsx index 37e55c1..89b111b 100644 --- a/src/app/register/register-client.tsx +++ b/src/app/register/register-client.tsx @@ -102,8 +102,8 @@ export function RegisterClient() { if (step === 2) { return Boolean( values.businessName && - values.businessCategory && - values.businessDescription, + values.businessCategory && + values.businessDescription, ); } @@ -263,9 +263,7 @@ export function RegisterClient() { {step === 2 && "Business details"} {step === 3 && "Email verification"}

-

- Step {step} of 3 -

+

Step {step} of 3

diff --git a/src/app/sign-in/sign-in-client.tsx b/src/app/sign-in/sign-in-client.tsx index 28f0481..6bfd354 100644 --- a/src/app/sign-in/sign-in-client.tsx +++ b/src/app/sign-in/sign-in-client.tsx @@ -71,15 +71,12 @@ export function SignInClient() { setStatus("connecting"); try { - const { StellarWalletsKit, Networks } = await import( - "@creit.tech/stellar-wallets-kit" - ); - const { defaultModules } = await import( - "@creit.tech/stellar-wallets-kit/modules/utils" - ); - const { FREIGHTER_ID } = await import( - "@creit.tech/stellar-wallets-kit/modules/freighter" - ); + const { StellarWalletsKit, Networks } = + await import("@creit.tech/stellar-wallets-kit"); + const { defaultModules } = + await import("@creit.tech/stellar-wallets-kit/modules/utils"); + const { FREIGHTER_ID } = + await import("@creit.tech/stellar-wallets-kit/modules/freighter"); StellarWalletsKit.init({ network: Networks.TESTNET,