diff --git a/.github/workflows/video-backend-ci.yml b/.github/workflows/video-backend-ci.yml index 718856a4..0ab3e2d6 100644 --- a/.github/workflows/video-backend-ci.yml +++ b/.github/workflows/video-backend-ci.yml @@ -15,25 +15,33 @@ jobs: - name: Checkout Repository uses: actions/checkout@v4 + - name: Setup pnpm + uses: pnpm/action-setup@v3 + with: + version: 9 + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - cache: 'npm' + cache: 'pnpm' + cache-dependency-path: pnpm-lock.yaml - name: Install Dependencies - run: npm ci + run: pnpm install --frozen-lockfile - name: Run Prisma Generate - run: npx prisma generate + run: pnpm exec prisma generate + env: + DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/postgres' - name: ESLint Check - run: npm run lint + run: pnpm run lint - name: Run Vitest Suite (Unit & Integration) - run: npm run test + run: pnpm run test - name: Build Next.js 15 - run: npm run build + run: pnpm run build env: NEXT_TELEMETRY_DISABLED: 1 diff --git a/.jules/palette.md b/.jules/palette.md new file mode 100644 index 00000000..156d9dc3 --- /dev/null +++ b/.jules/palette.md @@ -0,0 +1,4 @@ + +## 2024-03-23 - [Adding Keyboard Focus Rings to Custom Components] +**Learning:** Custom components like `motion.button` and pure visual elements (like styled `div` wrappers) easily lose their keyboard navigability when stripped of native HTML button semantics. In `Navbar.tsx`, interactive icons and visually simulated buttons lacked the `focus-visible` ring. +**Action:** When working on navigation or custom component libraries in this app, explicitly use `focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:outline-none` on interactive elements to ensure they do not become "dead ends" for keyboard users, and convert interactive `div` wrappers into native `
- } /> - } /> + } ariaLabel="Notifications" /> + } ariaLabel="User Profile" />
-
+
System Online
@@ -55,19 +58,21 @@ export default function Navbar() { function NavLink({ href, label }: { href: string, label: string }) { return ( - + {label} ); } -function IconButton({ icon }: { icon: React.ReactNode }) { +function IconButton({ icon, ariaLabel }: { icon: React.ReactNode, ariaLabel: string }) { return ( {icon}