Preview#277
Conversation
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.542.0 to 0.544.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.544.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-version: 0.544.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [axios](https://github.com/axios/axios) from 1.11.0 to 1.12.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](axios/axios@v1.11.0...v1.12.2) --- updated-dependencies: - dependency-name: axios dependency-version: 1.12.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [react-day-picker](https://github.com/gpbl/react-day-picker) from 9.9.0 to 9.10.0. - [Release notes](https://github.com/gpbl/react-day-picker/releases) - [Changelog](https://github.com/gpbl/react-day-picker/blob/main/CHANGELOG.md) - [Commits](gpbl/react-day-picker@v9.9.0...v9.10.0) --- updated-dependencies: - dependency-name: react-day-picker dependency-version: 9.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…ew/react-day-picker-9.10.0 npm(deps): bump react-day-picker from 9.9.0 to 9.10.0
…ew/lucide-react-0.544.0 npm(deps): bump lucide-react from 0.542.0 to 0.544.0
…ew/axios-1.12.2 npm(deps): bump axios from 1.11.0 to 1.12.2
Bumps [react-day-picker](https://github.com/gpbl/react-day-picker) from 9.10.0 to 9.11.0. - [Release notes](https://github.com/gpbl/react-day-picker/releases) - [Changelog](https://github.com/gpbl/react-day-picker/blob/main/CHANGELOG.md) - [Commits](gpbl/react-day-picker@v9.10.0...v9.11.0) --- updated-dependencies: - dependency-name: react-day-picker dependency-version: 9.11.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…ew/react-day-picker-9.11.0 npm(deps): bump react-day-picker from 9.10.0 to 9.11.0
Bumps [jest-environment-jsdom](https://github.com/jestjs/jest/tree/HEAD/packages/jest-environment-jsdom) from 30.1.2 to 30.2.0. - [Release notes](https://github.com/jestjs/jest/releases) - [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jestjs/jest/commits/v30.2.0/packages/jest-environment-jsdom) --- updated-dependencies: - dependency-name: jest-environment-jsdom dependency-version: 30.2.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.9.2 to 5.9.3. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml) - [Commits](microsoft/TypeScript@v5.9.2...v5.9.3) --- updated-dependencies: - dependency-name: typescript dependency-version: 5.9.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.8.0 to 6.9.1. - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md) - [Commits](testing-library/jest-dom@v6.8.0...v6.9.1) --- updated-dependencies: - dependency-name: "@testing-library/jest-dom" dependency-version: 6.9.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [react-day-picker](https://github.com/gpbl/react-day-picker) from 9.11.0 to 9.11.1. - [Release notes](https://github.com/gpbl/react-day-picker/releases) - [Changelog](https://github.com/gpbl/react-day-picker/blob/main/CHANGELOG.md) - [Commits](gpbl/react-day-picker@v9.11.0...v9.11.1) --- updated-dependencies: - dependency-name: react-day-picker dependency-version: 9.11.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.544.0 to 0.553.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.553.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-version: 0.553.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@radix-ui/react-slot](https://github.com/radix-ui/primitives) from 1.2.3 to 1.2.4. - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) --- updated-dependencies: - dependency-name: "@radix-ui/react-slot" dependency-version: 1.2.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@radix-ui/react-progress](https://github.com/radix-ui/primitives) from 1.1.7 to 1.1.8. - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) --- updated-dependencies: - dependency-name: "@radix-ui/react-progress" dependency-version: 1.1.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…ew/radix-ui/react-progress-1.1.8 npm(deps): bump @radix-ui/react-progress from 1.1.7 to 1.1.8
…ew/radix-ui/react-slot-1.2.4 npm(deps): bump @radix-ui/react-slot from 1.2.3 to 1.2.4
Bumps [@radix-ui/react-label](https://github.com/radix-ui/primitives) from 2.1.7 to 2.1.8. - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) --- updated-dependencies: - dependency-name: "@radix-ui/react-label" dependency-version: 2.1.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…ew/radix-ui/react-label-2.1.8 npm(deps): bump @radix-ui/react-label from 2.1.7 to 2.1.8
Bumps [@radix-ui/react-separator](https://github.com/radix-ui/primitives) from 1.1.7 to 1.1.8. - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) --- updated-dependencies: - dependency-name: "@radix-ui/react-separator" dependency-version: 1.1.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…ew/jest-environment-jsdom-30.2.0 npm(deps-dev): bump jest-environment-jsdom from 30.1.2 to 30.2.0
…ew/testing-library/jest-dom-6.9.1 npm(deps-dev): bump @testing-library/jest-dom from 6.8.0 to 6.9.1
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.13 to 4.1.17. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.17/packages/tailwindcss) --- updated-dependencies: - dependency-name: tailwindcss dependency-version: 4.1.17 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) from 4.1.13 to 4.1.17. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.17/packages/@tailwindcss-postcss) --- updated-dependencies: - dependency-name: "@tailwindcss/postcss" dependency-version: 4.1.17 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…ew/typescript-5.9.3 npm(deps-dev): bump typescript from 5.9.2 to 5.9.3
…ew/react-day-picker-9.11.1 npm(deps): bump react-day-picker from 9.11.0 to 9.11.1
…ew/lucide-react-0.553.0 npm(deps): bump lucide-react from 0.544.0 to 0.553.0
…ew/radix-ui/react-separator-1.1.8 npm(deps): bump @radix-ui/react-separator from 1.1.7 to 1.1.8
…ew/tailwindcss-4.1.17 npm(deps-dev): bump tailwindcss from 4.1.13 to 4.1.17
…ew/tailwindcss/postcss-4.1.17 npm(deps-dev): bump @tailwindcss/postcss from 4.1.13 to 4.1.17
Bumps [next](https://github.com/vercel/next.js) from 15.5.2 to 16.1.6. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](vercel/next.js@v15.5.2...v16.1.6) --- updated-dependencies: - dependency-name: next dependency-version: 16.1.6 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
✅ Deploy Preview for taskipline ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
This pull request implements GitHub OAuth authentication, updates various dependencies, modifies the header UI with placeholder navigation items, and adds an MIT license file. The changes introduce a new GitHub authentication flow alongside the existing Google OAuth implementation.
Changes:
- Added GitHub OAuth authentication with client-side OAuth flow implementation
- Updated multiple dependencies including Radix UI components, axios, lucide-react, and testing libraries
- Modified header navigation to replace working links with non-functional tooltip placeholders showing "Under construction"
- Added MIT license file
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
| src/types/auth.ts | Adds GithubAuthPayload type for GitHub OAuth |
| src/services/authService.ts | Implements signInWithGithub service function |
| src/app/(auth)/signin/page.tsx | Integrates GitHub OAuth flow with state management and callback handling |
| src/lib/env.ts | Adds GitHub OAuth environment variables and constructs redirect URIs |
| src/components/header.tsx | Replaces functional navigation links with tooltip placeholders |
| package.json | Updates dependencies and adds radix-ui meta-package |
| package-lock.json | Lock file updates for dependency changes |
| LICENCE | Adds MIT license file |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| export const apiUrl = process.env.NEXT_PUBLIC_TASKIPLINE_API | ||
| // google oauth | ||
| export const clientId = process.env.NEXT_PUBLIC_CLIENT_ID | ||
| export const clientSecret = process.env.NEXT_PUBLIC_CLIENT_SECRET |
There was a problem hiding this comment.
The clientSecret and githubClientSecret are exposed as client-side environment variables with the NEXT_PUBLIC_ prefix. OAuth client secrets should never be exposed to the client-side code as they can be accessed by anyone viewing the browser source. These secrets should only be used in server-side code (API routes or server components) where they remain secure.
| export const googleRedirectUri = `${siteUrl}${googleRedirectPath}` | ||
| // github oauth | ||
| export const githubClientId = process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID | ||
| export const githubClientSecret = process.env.NEXT_PUBLIC_GITHUB_SECRET | ||
| export const githubRedirectPath = process.env.NEXT_PUBLIC_GITHUB_REDIRECT_PATH | ||
| export const githubRedirectUri = `${siteUrl}${githubRedirectPath}` |
There was a problem hiding this comment.
The githubRedirectUri is constructed by concatenating siteUrl and githubRedirectPath, both of which could be undefined if the environment variables are not set. This would result in "undefined/auth/github/callback" or similar malformed URLs. Consider adding validation or default values to prevent runtime errors.
| codeProcessed.current = true | ||
| signInWithGithubMutation.mutate({ code }) | ||
| } | ||
| }, [code, error, state, signInWithGithubMutation, router]) |
There was a problem hiding this comment.
The useEffect dependency array includes signInWithGithubMutation, which is a mutation object that changes on every render. This will cause the effect to run on every render, potentially triggering multiple OAuth callbacks. The mutation should be excluded from the dependency array, or use useCallback to memoize the mutation trigger. React Query mutations are stable and don't need to be in the dependency array.
| useEffect(() => { | ||
| if (code && !codeProcessed.current) { | ||
| console.log('GitHub OAuth params:', { code, state, error }) | ||
|
|
||
| if (error) { | ||
| notify('error', `GitHub auth error: ${error}`) | ||
| // router.push('/signin') | ||
| return | ||
| } | ||
|
|
||
| if (state !== githubState) { | ||
| notify('error', 'Invalid state parameter') | ||
| // router.push('/signin') | ||
| return | ||
| } |
There was a problem hiding this comment.
The codeProcessed ref is used to prevent duplicate processing, but after an error (lines 127-130, 133-136), the ref is not reset. If the user remains on the page and the OAuth flow completes again (e.g., after fixing the error), the code won't be processed because codeProcessed.current remains true. Consider resetting the ref on error or removing the error parameters from the URL.
|
|
||
| useEffect(() => { | ||
| if (code && !codeProcessed.current) { | ||
| console.log('GitHub OAuth params:', { code, state, error }) |
There was a problem hiding this comment.
Console.log statements should be removed in production code. The statement logs sensitive OAuth parameters including the authorization code. This could expose sensitive information if console logs are accidentally left enabled or captured in error monitoring tools.
| export const googleRedirectUri = `${siteUrl}${googleRedirectPath}` | ||
| // github oauth | ||
| export const githubClientId = process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID | ||
| export const githubClientSecret = process.env.NEXT_PUBLIC_GITHUB_SECRET |
There was a problem hiding this comment.
The githubClientSecret is exposed as a client-side environment variable with the NEXT_PUBLIC_ prefix. OAuth client secrets should never be exposed to the client-side code as they can be accessed by anyone viewing the browser source. These secrets should only be used in server-side code (API routes or server components) where they remain secure.
| if (state !== githubState) { | ||
| notify('error', 'Invalid state parameter') | ||
| // router.push('/signin') | ||
| return | ||
| } |
There was a problem hiding this comment.
The GitHub OAuth state parameter validation has a potential security issue. If githubState is undefined (when NEXT_PUBLIC_GITHUB_STATE is not set), the comparison state !== githubState would compare the received state to undefined, which could be bypassed. Additionally, using a static state parameter from environment variables defeats the purpose of CSRF protection. The state should be a cryptographically random value generated per-request and stored in session/localStorage to be validated upon callback.
| // router.push('/signin') | ||
| return | ||
| } | ||
|
|
||
| if (state !== githubState) { | ||
| notify('error', 'Invalid state parameter') | ||
| // router.push('/signin') | ||
| return |
There was a problem hiding this comment.
The commented-out router.push calls should either be uncommented to redirect users after errors, or removed entirely. Leaving them commented suggests incomplete implementation. After an OAuth error, users should be redirected to clean up the URL parameters, or the parameters should be removed from the URL without navigation.
| <ModeToggle /> | ||
| {/* <WaitlistModal ctaSize="default" /> */} | ||
| <div className="flex gap-2"> | ||
| {' '} |
There was a problem hiding this comment.
There's an extraneous string literal with just a space character on line 98. This doesn't affect functionality but is unnecessary and should be removed for code cleanliness.
| <Tooltip> | ||
| <TooltipTrigger asChild> | ||
| <p className="text-sm font-medium transition-colors hover:text-primary cursor-pointer"> | ||
| Product | ||
| </p> | ||
| </TooltipTrigger> | ||
| <TooltipContent> | ||
| <p>Under construction!</p> | ||
| </TooltipContent> | ||
| </Tooltip> | ||
| <Tooltip> | ||
| <TooltipTrigger asChild> | ||
| <p className="text-sm font-medium transition-colors hover:text-primary cursor-pointer"> | ||
| Prices | ||
| </p> | ||
| </TooltipTrigger> | ||
| <TooltipContent> | ||
| <p>Under construction!</p> | ||
| </TooltipContent> | ||
| </Tooltip> | ||
| <Tooltip> | ||
| <TooltipTrigger asChild> | ||
| <p className="text-sm font-medium transition-colors hover:text-primary cursor-pointer"> | ||
| Resources | ||
| </p> | ||
| </TooltipTrigger> | ||
| <TooltipContent> | ||
| <p>Under construction!</p> | ||
| </TooltipContent> | ||
| </Tooltip> |
There was a problem hiding this comment.
The same accessibility issue exists in the mobile navigation. The navigation items (Product, Prices, Resources) use <p> tags instead of proper interactive elements like <button>, creating accessibility issues. These elements appear clickable but don't perform any action. Consider using <button> elements with disabled attribute for better semantics and accessibility.
…ew/next-16.1.6 npm(deps): bump next from 15.5.2 to 16.1.6
No description provided.