-
Notifications
You must be signed in to change notification settings - Fork 93
feat: add AI Career Copilot AgentKit #102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Durvankur-Joshi
wants to merge
13
commits into
Lamatic:main
Choose a base branch
from
Durvankur-Joshi:feat/ai-career-copilot
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
40f6799
feat: add AI Career Copilot AgentKit
Durvankur-Joshi 5a8b463
fix: revert to tailwind v3 for stable UI and config support
Durvankur-Joshi 8c950d2
docs: improve README formatting and setup instructions
Durvankur-Joshi 31efcc7
Changes done update the pacakge.json wiht regarding to the vercel error
Durvankur-Joshi 60c3892
vercel.json add
Durvankur-Joshi f54152b
fix: CSS error solved
Durvankur-Joshi e027c22
fix: migrate to tailwind v4 and update env variables
Durvankur-Joshi 2246b85
chore: trigger CI rerun
Durvankur-Joshi 3f2b5c5
chore: rerun CI
Durvankur-Joshi 4b23444
Merge branch 'main' into feat/ai-career-copilot
Durvankur-Joshi b494c97
fix: pin dependency versions for reproducible builds
Durvankur-Joshi 0d51c1a
fix: update config name and env key to match flow
Durvankur-Joshi edbc184
Merge branch 'main' into feat/ai-career-copilot
Durvankur-Joshi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| LAMATIC_API_KEY=YOUR_API_KEY | ||
| LAMATIC_PROJECT_ID=YOUR_PROJECT_ID | ||
| LAMATIC_API_URL=https://your-project.lamatic.dev/graphql | ||
| LAMATIC_FLOW_ID=YOUR_FLOW_ID |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| # dependencies | ||
| /node_modules | ||
| /.pnp | ||
| .pnp.js | ||
| .yarn/install-state.gz | ||
|
|
||
| # testing | ||
| /coverage | ||
|
|
||
| # next.js | ||
| /.next/ | ||
| /out/ | ||
|
|
||
| # production | ||
| /build | ||
|
|
||
| # misc | ||
| .DS_Store | ||
| *.pem | ||
|
|
||
| # debug | ||
| npm-debug.log* | ||
| yarn-debug.log* | ||
| yarn-error.log* | ||
|
|
||
| # local env files | ||
| .env*.local | ||
| .env | ||
|
|
||
| # vercel | ||
| .vercel | ||
|
|
||
| # typescript | ||
| *.tsbuildinfo | ||
| next-env.d.ts | ||
|
|
||
| .env | ||
| .env.local | ||
| node_modules | ||
| .vscode | ||
| .next |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,165 @@ | ||
| # π AI Career Copilot | ||
|
|
||
| An AI-powered career assistant that analyzes resumes and provides personalized career guidance including skill analysis, job recommendations, learning roadmaps, project suggestions, and interview preparation. | ||
|
|
||
| --- | ||
|
|
||
| ## β¨ Features | ||
|
|
||
| * π― **Skill Analysis** β Extract and analyze skills from resumes | ||
| * π **Readiness Score** β Evaluate how job-ready you are | ||
| * πΌ **Role Suggestions** β Get suitable job roles | ||
| * πΊοΈ **Learning Roadmap** β Step-by-step improvement plan | ||
| * π **Project Ideas** β Build real-world portfolio projects | ||
| * π¬ **Interview Questions** β Practice with tailored questions | ||
|
|
||
| --- | ||
|
|
||
| ## π Tech Stack | ||
|
|
||
| * **Frontend:** Next.js, React, Tailwind CSS | ||
| * **Backend:** Lamatic AI Flow (GraphQL API) | ||
| * **API Communication:** Axios | ||
|
|
||
| --- | ||
|
|
||
| ## π¦ Prerequisites | ||
|
|
||
| * Node.js 18+ | ||
| * npm | ||
| * Lamatic Account | ||
| * Deployed Lamatic Flow | ||
|
|
||
| --- | ||
|
|
||
| ## βοΈ Installation | ||
|
|
||
| 1. **Clone the repository** | ||
|
|
||
| ```bash | ||
| git clone https://github.com/Lamatic/AgentKit.git | ||
| cd AgentKit/kits/assistant/ai-career-copilot | ||
| ``` | ||
|
|
||
| 2. **Install dependencies** | ||
|
|
||
| ```bash | ||
| npm install | ||
| ``` | ||
|
|
||
| 3. **Setup environment variables** | ||
|
|
||
| ```bash | ||
| cp .env.example .env | ||
| ``` | ||
|
|
||
| 4. **Add your Lamatic credentials in `.env`** | ||
|
|
||
| ```env | ||
| LAMATIC_API_KEY=YOUR_API_KEY | ||
| LAMATIC_PROJECT_ID=YOUR_PROJECT_ID | ||
| LAMATIC_API_URL=YOUR_API_URL | ||
| AGENTIC_GENERATE_CONTENT=YOUR_FLOW_ID | ||
| ``` | ||
|
|
||
| 5. **Run the project** | ||
|
|
||
| ```bash | ||
| npm run dev | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## π§ͺ Usage | ||
|
|
||
| 1. Enter your **resume text** | ||
| 2. Select your **target domain** (e.g., Web Development) | ||
| 3. Click **Analyze** | ||
| 4. Get: | ||
|
|
||
| * Skills | ||
| * Missing skills | ||
| * Roles | ||
| * Roadmap | ||
| * Projects | ||
| * Interview questions | ||
|
|
||
| --- | ||
|
|
||
| ## π Project Structure | ||
|
|
||
| ``` | ||
| ai-career-copilot/ | ||
| βββ app/ # Next.js pages | ||
| βββ components/ # UI components | ||
| βββ actions/ # Server actions | ||
| βββ lib/ # Lamatic API client | ||
| βββ flows/ # Exported Lamatic flow | ||
| βββ .env.example # Environment template | ||
| βββ config.json # Kit configuration | ||
| βββ README.md | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## π Lamatic Flow | ||
|
|
||
| * **Flow ID:** `66c98d92-70da-4eec-82b0-af4f01be9cd5` | ||
| * **Type:** Synchronous GraphQL Workflow | ||
|
|
||
| --- | ||
|
|
||
| ## π Deployment | ||
|
|
||
| You can deploy using Vercel: | ||
|
|
||
| * Set root directory: | ||
|
|
||
| ``` | ||
| kits/assistant/ai-career-copilot | ||
| ``` | ||
|
|
||
| * Add environment variables in Vercel dashboard | ||
|
|
||
| --- | ||
|
|
||
| ## π Example Input | ||
|
|
||
| **Resume:** | ||
|
|
||
| ``` | ||
| I know JavaScript, React, and basic Node.js | ||
| ``` | ||
|
|
||
| **Domain:** | ||
|
|
||
| ``` | ||
| Web Development | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## π Output Includes | ||
|
|
||
| * Skills & Missing Skills | ||
| * Career Roles | ||
| * Readiness Score | ||
| * Learning Roadmap | ||
| * Suggested Projects | ||
| * Interview Questions | ||
|
|
||
| --- | ||
|
|
||
| ## π€ Contribution | ||
|
|
||
| This project is built as part of a Lamatic AgentKit contribution. | ||
|
|
||
| --- | ||
|
|
||
| ## π¨βπ» Author | ||
|
|
||
| **Durvankur Joshi** | ||
|
|
||
| --- | ||
|
|
||
| ## β If you like this project, give it a star! | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| 'use server'; | ||
|
|
||
| import { executeCareerAnalysis } from '@/lib/lamatic-client'; | ||
| import { CareerAnalysisInput, ApiResponse, CareerAnalysisOutput } from '@/types'; | ||
|
|
||
| export async function analyzeCareer( | ||
| input: CareerAnalysisInput | ||
| ): Promise<ApiResponse> { | ||
| try { | ||
| console.log('π Analyzing career with input:', { | ||
| resumeLength: input.resume_text?.length, | ||
| domain: input.domain, | ||
| }); | ||
|
|
||
| // β Validation | ||
| if (!input.resume_text?.trim()) { | ||
| return { success: false, error: 'Resume text is required' }; | ||
| } | ||
|
|
||
| if (!input.domain?.trim()) { | ||
| return { success: false, error: 'Target domain is required' }; | ||
| } | ||
|
|
||
| const result = await executeCareerAnalysis(input); | ||
|
|
||
| return { | ||
| success: true, | ||
| data: result as CareerAnalysisOutput, // β Now matches type | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
|
|
||
| } catch (error) { | ||
| console.error('β Career analysis error:', error); | ||
|
|
||
| return { | ||
| success: false, | ||
| error: | ||
| error instanceof Error | ||
| ? error.message | ||
| : 'Failed to analyze career data.', | ||
| }; | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| @import "tailwindcss"; | ||
|
|
||
| @layer base { | ||
| body { | ||
| @apply bg-gray-50 text-gray-900; | ||
| } | ||
| } | ||
|
|
||
| @layer components { | ||
| .btn-primary { | ||
| @apply bg-blue-600 text-white px-6 py-2 rounded-lg hover:bg-blue-700 transition-colors duration-200 font-medium; | ||
| } | ||
|
|
||
| .btn-secondary { | ||
| @apply bg-gray-200 text-gray-800 px-6 py-2 rounded-lg hover:bg-gray-300 transition-colors duration-200 font-medium; | ||
| } | ||
|
|
||
| .card { | ||
| @apply bg-white rounded-xl shadow-md p-6 border border-gray-100; | ||
| } | ||
|
|
||
| .input-field { | ||
| @apply w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition; | ||
| } | ||
| } | ||
| @keyframes slideDown { | ||
| from { | ||
| height: 0; | ||
| } | ||
| to { | ||
| height: var(--radix-accordion-content-height); | ||
| } | ||
| } | ||
|
|
||
| @keyframes slideUp { | ||
| from { | ||
| height: var(--radix-accordion-content-height); | ||
| } | ||
| to { | ||
| height: 0; | ||
| } | ||
| } | ||
|
|
||
| .animate-slideDown { | ||
| animation: slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1); | ||
| } | ||
|
|
||
| .animate-slideUp { | ||
| animation: slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| import type { Metadata } from 'next'; | ||
| import { Inter } from 'next/font/google'; | ||
| import './globals.css'; | ||
|
|
||
| const inter = Inter({ subsets: ['latin'] }); | ||
|
|
||
| export const metadata: Metadata = { | ||
| title: 'AI Career Copilot | Your Personal Career Assistant', | ||
| description: 'AI-powered career analysis tool that helps you identify skills, find suitable roles, and create personalized learning paths.', | ||
| keywords: 'career, AI, resume analysis, job recommendations, skill development, career planning', | ||
| authors: [{ name: 'Durvankur Joshi ' }], | ||
| openGraph: { | ||
| title: 'AI Career Copilot', | ||
| description: 'Your personal AI career assistant', | ||
| type: 'website', | ||
| }, | ||
| }; | ||
|
|
||
| export default function RootLayout({ | ||
| children, | ||
| }: { | ||
| children: React.ReactNode; | ||
| }) { | ||
| return ( | ||
| <html lang="en"> | ||
| <body className={inter.className}>{children}</body> | ||
| </html> | ||
| ); | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.