Skip to content

feat: add AI Career Copilot AgentKit#102

Open
Durvankur-Joshi wants to merge 13 commits intoLamatic:mainfrom
Durvankur-Joshi:feat/ai-career-copilot
Open

feat: add AI Career Copilot AgentKit#102
Durvankur-Joshi wants to merge 13 commits intoLamatic:mainfrom
Durvankur-Joshi:feat/ai-career-copilot

Conversation

@Durvankur-Joshi
Copy link
Copy Markdown

@Durvankur-Joshi Durvankur-Joshi commented Mar 25, 2026

🚀 AI Career Copilot

What This Kit Does

AI-powered career assistant that analyzes resumes and provides:

  • Skill extraction
  • Missing skills identification
  • Career role recommendations
  • Readiness score
  • Personalized learning roadmap
  • Project suggestions
  • Interview questions

Providers & Prerequisites

  • Lamatic AI (GraphQL Workflow)
  • Node.js 18+

How to Run Locally

  1. Navigate to the project:
    cd kits/assistant/ai-career-copilot

  2. Install dependencies:
    npm install

  3. Set up environment variables:
    cp .env.example .env

  4. Add your Lamatic credentials in .env

  5. Run the project:
    npm run dev

Live Preview

https://your-vercel-link.vercel.app/

Lamatic Flow

Flow ID: 66c98d92-70da-4eec-82b0-af4f01be9cd5

Files Added

Configuration & Setup Files:

  • .env.example – Environment variable placeholders for Lamatic API credentials (LAMATIC_API_KEY, LAMATIC_PROJECT_ID, LAMATIC_API_URL, LAMATIC_FLOW_ID)
  • .gitignore – Development artifact exclusions (node_modules, .next, .env, coverage, build directories, OS files)
  • config.json – Assistant metadata defining name, version, description, capabilities, Node.js/npm requirements
  • package.json – npm dependencies (Next.js, React, Axios, Tailwind CSS v4, Lucide icons, TypeScript)
  • tsconfig.json – TypeScript configuration with strict mode, path aliases, incremental builds
  • next.config.js – Next.js settings (React strict mode, SWC minification, remote image domains, environment variable exposure)
  • postcss.config.js – PostCSS configuration with Tailwind CSS v4 (@tailwindcss/postcss) plugin
  • vercel.json – Vercel deployment configuration

Frontend Components:

  • app/layout.tsx – Root Next.js layout with metadata (title, description, keywords, Open Graph) and Google Inter font
  • app/page.tsx – Home page with form submission, loading/error states, and result display
  • app/globals.css – Global Tailwind styles and utility classes (.btn-primary, .btn-secondary, .card, .input-field)
  • components/CareerAnalysisForm.tsx – Form with resume textarea and domain dropdown; validates minimum 50 characters
  • components/AnalysisResult.tsx – Displays readiness score, skills, roadmap, projects, interview questions, and recommended roles
  • components/SkillsDisplay.tsx – Shows current skills (green badges) and missing skills (yellow badges)
  • components/RoadmapDisplay.tsx – Numbered learning roadmap steps
  • components/ProjectsDisplay.tsx – List of recommended projects
  • components/InterviewQuestions.tsx – Numbered interview practice questions
  • components/LoadingSpinner.tsx – Animated dual-ring spinner with pulsing status
  • components/ErrorMessage.tsx – Error display with optional "Try Again" button

Server & API Layer:

  • actions/orchestrate.ts – Server action analyzeCareer() that validates input, calls Lamatic client, handles errors, returns typed response
  • lib/lamatic-client.ts – GraphQL client executing career analysis workflow via Lamatic with Authorization and x-project-id headers

Type Definitions:

  • types/index.ts – TypeScript interfaces for CareerAnalysisInput, CareerAnalysisOutput, and ApiResponse

Lamatic Flow Files:

  • flows/ai-career-copilot/README.md – Flow documentation, setup instructions, and contribution guidelines
  • flows/ai-career-copilot/config.json – Complete workflow configuration (see flow details)
  • flows/ai-career-copilot/inputs.json – Model selection configuration for 6 InstructorLLMNode instances
  • flows/ai-career-copilot/meta.json – Flow metadata

Documentation:

  • README.md – Project overview, feature list, tech stack, prerequisites, setup, and Vercel deployment instructions

Lamatic Flow Architecture

Flow Type: Synchronous GraphQL-triggered workflow returning consolidated JSON response

Input Parameters:

  • resume_text (string)
  • domain (string)

Processing Pipeline (9 Sequential Nodes):

  1. API Request (triggerNode) – GraphQL trigger accepting resume_text and domain
  2. Skills Extraction (codeNode_872) – JavaScript code node that regex-matches resume text against a predefined skill database (HTML, CSS, JavaScript, React, Node.js, MongoDB, SQL, Python, Java, communication, teamwork, problem-solving) and extracts matching skills using word-boundary regex
  3. Missing Skills Analysis (InstructorLLMNode_991) – LLM node identifies skills missing for target domain based on user's current skills
  4. Career Role Suggestion (InstructorLLMNode_559) – LLM node recommends beginner-friendly job roles matching skills and target domain
  5. Readiness Score (InstructorLLMNode_409) – LLM node calculates job-readiness as a numeric score (0–100) based on skill gaps (higher missing skills = lower score; beginner with some skills = 40–70 range)
  6. Learning Roadmap (InstructorLLMNode_134) – LLM node generates 5–7 step personalized learning plan prioritizing critical skills
  7. Project Suggestions (InstructorLLMNode_248) – LLM node proposes 3–5 beginner-to-intermediate practical projects to cover missing skills
  8. Interview Questions (InstructorLLMNode_755) – LLM node generates 5 beginner-to-intermediate interview practice questions tailored to skills and domain
  9. API Response (responseNode) – GraphQL response consolidating all outputs into single JSON payload with fields: skills, missing_skills, roles, readiness_score, roadmap, projects, interview_questions

Data Flow: Linear sequential pipeline where each LLM node receives extracted skills and domain context, processes via system+user prompts, and returns structured JSON following a schema. Final response node aggregates all node outputs into unified API response with application/json content-type header.

Summary: End-to-end resume analysis workflow that performs skill extraction via regex matching, identifies gaps for target domain, recommends entry-level roles, scores job readiness (0–100 scale), generates step-by-step learning path, suggests practical portfolio projects, and provides interview preparation questions—all delivered synchronously through single GraphQL API call.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 25, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This pull request introduces the complete AI Career Copilot assistant kit, a Next.js/React application that analyzes resume text and provides personalized career guidance. It includes frontend components, backend server actions, Lamatic AI flow configuration, and all necessary build/runtime configurations.

Changes

Cohort / File(s) Summary
Configuration & Build Setup
.env.example, .gitignore, package.json, next.config.js, postcss.config.js, tsconfig.json, vercel.json
Added environment variable template, build exclusions, npm dependencies (Next.js, React, Tailwind, Axios, Lucide icons), Next.js configuration with image domain allowlist and environment variable export, PostCSS+Tailwind setup, strict TypeScript configuration with path aliases, and Vercel deployment settings.
Type Definitions & App Configuration
types/index.ts, config.json
Added TypeScript interfaces for CareerAnalysisInput, CareerAnalysisOutput, and ApiResponse to define data contracts. Added assistant metadata configuration with capabilities, version, and runtime requirements.
Frontend Layout & Styling
app/layout.tsx, app/globals.css
Added root Next.js layout with metadata, Inter font configuration, and HTML document structure. Added global Tailwind CSS with base body styling and reusable component utility classes (.btn-primary, .btn-secondary, .card, .input-field).
Main Application Page
app/page.tsx
Added main page component with local state management for loading, results, and errors. Implemented form submission handler that calls server action, result display logic, error handling with retry capability, and conditional rendering for form/loading/error/result states.
UI Components
components/CareerAnalysisForm.tsx, components/AnalysisResult.tsx, components/SkillsDisplay.tsx, components/RoadmapDisplay.tsx, components/ProjectsDisplay.tsx, components/InterviewQuestions.tsx, components/LoadingSpinner.tsx, components/ErrorMessage.tsx
Added eight reusable client-side React components covering form input with validation, result display orchestration, skills/roadmap/projects/interview questions presentation, loading state indicator, and error messaging with retry option. Components include field validation, conditional rendering for empty states, and icon-enhanced UI.
Backend Logic
actions/orchestrate.ts, lib/lamatic-client.ts
Added server-side action analyzeCareer that validates input and delegates to Lamatic API client. Added lamaticClient module that constructs and executes GraphQL workflow requests with proper authentication headers and error handling.
AI Flow Configuration
flows/ai-career-copilot/config.json, flows/ai-career-copilot/inputs.json, flows/ai-career-copilot/meta.json, flows/ai-career-copilot/README.md
Added complete Lamatic AI workflow configuration defining a multi-node pipeline for skill extraction, missing skill analysis, role recommendation, readiness scoring, learning roadmap generation, project suggestions, and interview question creation. Included flow metadata, model input schema definitions for LLM nodes, and setup documentation with contribution guidelines.
Documentation
README.md
Added project documentation describing assistant capabilities (skill analysis, readiness scoring, role suggestions, learning roadmap, project ideas, interview questions), tech stack, prerequisites, installation/setup instructions, usage flow, project structure, and Vercel deployment guidance.

Suggested reviewers

  • amanintech
🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers key requirements but is missing critical checklist items from the template (contribution type selection, file structure validation checklist items, and validation checklist items are not addressed). Complete the PR checklist by selecting contribution type, confirming file structure compliance (config.json, flows/, .env.example), and validating that local setup (npm install && npm run dev) and GitHub Actions checks pass.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the main contribution: adding an AI Career Copilot AgentKit, which aligns with the comprehensive changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Durvankur-Joshi
Copy link
Copy Markdown
Author

✅ Ready for Review

  • Project tested locally
  • Vercel deployment working
  • Flow integrated successfully
  • All required files added

Looking forward to feedback 🚀

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

🧹 Nitpick comments (9)
kits/assistant/ai-career-copilot/components/ErrorMessage.tsx (1)

19-25: Add explicit type="button" to prevent unintended form submission.

The button lacks an explicit type attribute. If this component is ever rendered inside a form, the default type ("submit") could cause unintended form submissions.

Proposed fix
             <button
+              type="button"
               onClick={onRetry}
               className="mt-3 inline-flex items-center gap-2 text-sm text-red-700 hover:text-red-800 font-medium"
             >
kits/assistant/ai-career-copilot/app/globals.css (1)

1-3: Stylelint configuration needs Tailwind support.

The Stylelint errors flagging @tailwind as unknown are false positives. Configure Stylelint with stylelint-config-tailwindcss or add @tailwind to the ignoreAtRules option for scss/at-rule-no-unknown.

Note: These @tailwind directives follow Tailwind v3 syntax. If migrating to Tailwind v4+ per guidelines, the syntax would change to @import "tailwindcss";.

kits/assistant/ai-career-copilot/components/SkillsDisplay.tsx (1)

15-15: Consider using lucide-react icons instead of emoji for consistency.

Other components in this kit (e.g., ErrorMessage, RoadmapDisplay) use lucide-react icons. For visual consistency across the kit, consider replacing the emoji with icons.

Proposed changes
 'use client';
 
+import { CheckCircle2, AlertTriangle } from 'lucide-react';
+
 interface SkillsDisplayProps {
-          <p className="text-sm font-medium text-gray-700 mb-2">✓ Your Current Skills</p>
+          <p className="text-sm font-medium text-gray-700 mb-2 flex items-center gap-1">
+            <CheckCircle2 className="w-4 h-4 text-green-600" />
+            Your Current Skills
+          </p>
-          <p className="text-sm font-medium text-gray-700 mb-2">⚠️ Skills to Develop</p>
+          <p className="text-sm font-medium text-gray-700 mb-2 flex items-center gap-1">
+            <AlertTriangle className="w-4 h-4 text-yellow-600" />
+            Skills to Develop
+          </p>

Based on learnings: "Use lucide-react for icons throughout kits"

kits/assistant/ai-career-copilot/components/InterviewQuestions.tsx (1)

16-28: Minor: Empty state renders both container and message.

When questions.length === 0, the component renders an empty <div className="space-y-3"> followed by the fallback message. Consider conditionally rendering either the list or the fallback.

♻️ Suggested improvement
-      <div className="space-y-3">
-        {questions.map((question, idx) => (
-          <div key={idx} className="flex items-start gap-3">
-            <span className="flex-shrink-0 w-6 h-6 bg-gray-100 text-gray-600 rounded-full flex items-center justify-center text-xs font-semibold">
-              {idx + 1}
-            </span>
-            <p className="text-gray-700">{question}</p>
-          </div>
-        ))}
-      </div>
-      {questions.length === 0 && (
-        <p className="text-gray-500 text-center py-4">No interview questions available</p>
-      )}
+      {questions.length > 0 ? (
+        <div className="space-y-3">
+          {questions.map((question, idx) => (
+            <div key={idx} className="flex items-start gap-3">
+              <span className="flex-shrink-0 w-6 h-6 bg-gray-100 text-gray-600 rounded-full flex items-center justify-center text-xs font-semibold">
+                {idx + 1}
+              </span>
+              <p className="text-gray-700">{question}</p>
+            </div>
+          ))}
+        </div>
+      ) : (
+        <p className="text-gray-500 text-center py-4">No interview questions available</p>
+      )}
kits/assistant/ai-career-copilot/components/CareerAnalysisForm.tsx (1)

24-51: Form handling should use react-hook-form with zod validation.

The current implementation uses manual useState and custom validation logic. As per coding guidelines, kit forms should use react-hook-form with zod for validation.

♻️ Example refactor structure
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';

const formSchema = z.object({
  resumeText: z.string()
    .min(1, 'Please paste your resume text')
    .min(50, 'Please provide at least 50 characters of resume text for accurate analysis'),
  domain: z.string().min(1, 'Please select your target domain'),
});

type FormData = z.infer<typeof formSchema>;

export default function CareerAnalysisForm({ onSubmit }: CareerAnalysisFormProps) {
  const { register, handleSubmit, formState: { errors } } = useForm<FormData>({
    resolver: zodResolver(formSchema),
  });

  const onFormSubmit = (data: FormData) => {
    onSubmit(data.resumeText, data.domain);
  };

  return (
    <form onSubmit={handleSubmit(onFormSubmit)}>
      {/* ... */}
    </form>
  );
}

As per coding guidelines: "Use react-hook-form with zod validation for form handling in kits"

kits/assistant/ai-career-copilot/components/AnalysisResult.tsx (1)

8-8: Remove unused Lightbulb import.

The Lightbulb icon is imported but not used in this component. RoadmapDisplay imports it separately.

♻️ Suggested fix
-import { TrendingUp, Briefcase, Lightbulb } from 'lucide-react';
+import { TrendingUp, Briefcase } from 'lucide-react';
kits/assistant/ai-career-copilot/components/ProjectsDisplay.tsx (1)

16-26: Minor: Same empty state pattern issue as InterviewQuestions.

The empty container is rendered alongside the fallback message when projects.length === 0. Consider the same conditional rendering pattern suggested for InterviewQuestions.tsx.

kits/assistant/ai-career-copilot/app/page.tsx (1)

69-71: Consider using handleReset instead of page reload for retry.

Using window.location.reload() discards all client state and triggers a full page reload. The existing handleReset function could provide a smoother UX.

♻️ Suggested change
-            <ErrorMessage message={error} onRetry={() => window.location.reload()} />
+            <ErrorMessage message={error} onRetry={handleReset} />
kits/assistant/ai-career-copilot/lib/lamatic-client.ts (1)

3-6: Add runtime validation for required environment variables.

Non-null assertions (!) will throw unclear errors if environment variables are missing. Consider adding explicit validation with meaningful error messages.

♻️ Suggested improvement
-const endpoint = process.env.LAMATIC_API_URL!;
-const apiKey = process.env.LAMATIC_API_KEY!;
-const projectId = process.env.LAMATIC_PROJECT_ID!;
-const flowId = process.env.AGENTIC_GENERATE_CONTENT!;
+const endpoint = process.env.LAMATIC_API_URL;
+const apiKey = process.env.LAMATIC_API_KEY;
+const projectId = process.env.LAMATIC_PROJECT_ID;
+const flowId = process.env.AGENTIC_GENERATE_CONTENT;
+
+function assertEnvVar(name: string, value: string | undefined): asserts value is string {
+  if (!value) {
+    throw new Error(`Missing required environment variable: ${name}`);
+  }
+}

Then validate before use:

async executeCareerAnalysis(input: { ... }) {
  assertEnvVar('LAMATIC_API_URL', endpoint);
  assertEnvVar('LAMATIC_API_KEY', apiKey);
  assertEnvVar('LAMATIC_PROJECT_ID', projectId);
  assertEnvVar('AGENTIC_GENERATE_CONTENT', flowId);
  // ...
}

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 847c6d93-1353-430e-85a7-4cf4415a242e

📥 Commits

Reviewing files that changed from the base of the PR and between cd0d519 and 40f6799.

⛔ Files ignored due to path filters (1)
  • kits/assistant/ai-career-copilot/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (28)
  • kits/assistant/ai-career-copilot/.env.example
  • kits/assistant/ai-career-copilot/.gitignore
  • kits/assistant/ai-career-copilot/README.md
  • kits/assistant/ai-career-copilot/actions/orchestrate.ts
  • kits/assistant/ai-career-copilot/app/globals.css
  • kits/assistant/ai-career-copilot/app/layout.tsx
  • kits/assistant/ai-career-copilot/app/page.tsx
  • kits/assistant/ai-career-copilot/components/AnalysisResult.tsx
  • kits/assistant/ai-career-copilot/components/CareerAnalysisForm.tsx
  • kits/assistant/ai-career-copilot/components/ErrorMessage.tsx
  • kits/assistant/ai-career-copilot/components/InterviewQuestions.tsx
  • kits/assistant/ai-career-copilot/components/LoadingSpinner.tsx
  • kits/assistant/ai-career-copilot/components/ProjectsDisplay.tsx
  • kits/assistant/ai-career-copilot/components/RoadmapDisplay.tsx
  • kits/assistant/ai-career-copilot/components/SkillsDisplay.tsx
  • kits/assistant/ai-career-copilot/config.json
  • kits/assistant/ai-career-copilot/flows/ai-career-copilot/README.md
  • kits/assistant/ai-career-copilot/flows/ai-career-copilot/config.json
  • kits/assistant/ai-career-copilot/flows/ai-career-copilot/inputs.json
  • kits/assistant/ai-career-copilot/flows/ai-career-copilot/meta.json
  • kits/assistant/ai-career-copilot/git
  • kits/assistant/ai-career-copilot/lib/lamatic-client.ts
  • kits/assistant/ai-career-copilot/next.config.js
  • kits/assistant/ai-career-copilot/package.json
  • kits/assistant/ai-career-copilot/postcss.config.js
  • kits/assistant/ai-career-copilot/tailwind.config.ts
  • kits/assistant/ai-career-copilot/tsconfig.json
  • kits/assistant/ai-career-copilot/types/index.ts

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
kits/assistant/ai-career-copilot/.env.example (1)

1-4: Consider reordering keys to satisfy dotenv lint.

dotenv-linter flagged key ordering (LAMATIC_API_KEY before LAMATIC_API_URL). Not functionally required, but aligning avoids CI/lint noise.

kits/assistant/ai-career-copilot/README.md (1)

82-92: Add language identifiers to fenced code blocks (MD040).

These fences should declare languages (text, bash, etc.) to satisfy markdownlint and improve rendering consistency.

Also applies to: 109-111, 121-123, 127-129


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fb395155-da54-4434-9636-cb8d36f4e7fa

📥 Commits

Reviewing files that changed from the base of the PR and between 40f6799 and 5a8b463.

📒 Files selected for processing (8)
  • kits/assistant/ai-career-copilot/.env.example
  • kits/assistant/ai-career-copilot/.gitignore
  • kits/assistant/ai-career-copilot/README.md
  • kits/assistant/ai-career-copilot/actions/orchestrate.ts
  • kits/assistant/ai-career-copilot/app/layout.tsx
  • kits/assistant/ai-career-copilot/config.json
  • kits/assistant/ai-career-copilot/package.json
  • kits/assistant/ai-career-copilot/tsconfig.json
✅ Files skipped from review due to trivial changes (5)
  • kits/assistant/ai-career-copilot/tsconfig.json
  • kits/assistant/ai-career-copilot/.gitignore
  • kits/assistant/ai-career-copilot/config.json
  • kits/assistant/ai-career-copilot/package.json
  • kits/assistant/ai-career-copilot/app/layout.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • kits/assistant/ai-career-copilot/actions/orchestrate.ts

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5b1508b1-baef-4875-a28f-a9d2f0a82fbc

📥 Commits

Reviewing files that changed from the base of the PR and between 5a8b463 and 8c950d2.

📒 Files selected for processing (1)
  • kits/assistant/ai-career-copilot/README.md

@coderabbitai coderabbitai bot requested review from amanintech and d-pamneja March 29, 2026 13:00
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
kits/assistant/ai-career-copilot/package.json (1)

33-33: ⚠️ Potential issue | 🟠 Major

Mission-critical fix: upgrade tailwindcss to v4+ before launch.

Line 33 still pins tailwindcss to 3.3.0, which is below the kit baseline. Update to a v4+ exact version to stay compliant with the styling standard.

Based on learnings "Applies to kits/**/*.css : Use Tailwind CSS v4+ for styling kits".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/assistant/ai-career-copilot/package.json` at line 33, The package.json
currently pins "tailwindcss" to "3.3.0"; update that dependency to an exact v4+
version (for example "4.0.0" or the project's chosen exact release) in the
"tailwindcss" entry so the kit uses Tailwind CSS v4+; after changing the version
string, run your install (npm/yarn/pnpm) and verify the build and kit CSS files
compile against the new Tailwind major to ensure compatibility.
kits/assistant/ai-career-copilot/.env.example (1)

4-4: ⚠️ Potential issue | 🟡 Minor

Mission log update: Previous directive still pending.

Agent, your dossier shows this directive was issued in a previous briefing but remains incomplete: append a trailing newline at EOF to satisfy dotenv linting protocols.

🧰 Tools
🪛 dotenv-linter (4.0.0)

[warning] 4-4: [EndingBlankLine] No blank line at the end of the file

(EndingBlankLine)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/assistant/ai-career-copilot/.env.example` at line 4, The file lacks a
trailing newline at EOF; add a single blank line (newline) at the end of the
.env example so the final line "AGENTIC_GENERATE_CONTENT=YOUR_FLOW_ID" is
terminated by a newline character to satisfy dotenv-linter's EndingBlankLine
rule.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@kits/assistant/ai-career-copilot/.env.example`:
- Line 4: The env var AGENTIC_GENERATE_CONTENT is misnamed and should follow the
LAMATIC_* convention; rename it to LAMATIC_FLOW_ID in the .env.example and
update all usages in code (search for AGENTIC_GENERATE_CONTENT) including the
Lamatic client in lib/lamatic-client.ts to read process.env.LAMATIC_FLOW_ID (or
equivalent config accessor), ensure the placeholder value remains YOUR_FLOW_ID
and update any README or comments that reference the old variable name to the
new LAMATIC_FLOW_ID so runtime config remains consistent.

---

Duplicate comments:
In `@kits/assistant/ai-career-copilot/.env.example`:
- Line 4: The file lacks a trailing newline at EOF; add a single blank line
(newline) at the end of the .env example so the final line
"AGENTIC_GENERATE_CONTENT=YOUR_FLOW_ID" is terminated by a newline character to
satisfy dotenv-linter's EndingBlankLine rule.

In `@kits/assistant/ai-career-copilot/package.json`:
- Line 33: The package.json currently pins "tailwindcss" to "3.3.0"; update that
dependency to an exact v4+ version (for example "4.0.0" or the project's chosen
exact release) in the "tailwindcss" entry so the kit uses Tailwind CSS v4+;
after changing the version string, run your install (npm/yarn/pnpm) and verify
the build and kit CSS files compile against the new Tailwind major to ensure
compatibility.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 03254a02-69aa-4041-aaa2-9121fa0dac16

📥 Commits

Reviewing files that changed from the base of the PR and between 8c950d2 and 31efcc7.

⛔ Files ignored due to path filters (1)
  • kits/assistant/ai-career-copilot/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (2)
  • kits/assistant/ai-career-copilot/.env.example
  • kits/assistant/ai-career-copilot/package.json

@github-actions
Copy link
Copy Markdown

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 29, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (2)
kits/assistant/ai-career-copilot/package.json (1)

33-33: ⚠️ Potential issue | 🟠 Major

Mission-critical dependency drift: upgrade Tailwind to v4+

Your kit still declares tailwindcss: "3.4.1", which misses the kit baseline and can break consistency with v4-based styling expectations across kits.

#!/bin/bash
# Verify Tailwind major version in this kit package.json
python - <<'PY'
import json, re
p = "kits/assistant/ai-career-copilot/package.json"
v = json.load(open(p)).get("devDependencies", {}).get("tailwindcss", "")
m = re.search(r'(\d+)', v)
major = int(m.group(1)) if m else None
print("tailwindcss:", v)
print("major:", major)
print("PASS (>=4):", major is not None and major >= 4)
PY

Based on learnings: "Applies to kits/**/*.css : Use Tailwind CSS v4+ for styling kits".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/assistant/ai-career-copilot/package.json` at line 33, Update the kit's
declared Tailwind dependency so it targets Tailwind CSS v4+ by changing the
devDependencies entry for "tailwindcss" (the "tailwindcss" key in package.json)
to a v4-compatible range (for example "^4.0.0"); after updating, run your
package manager install (npm/yarn/pnpm) to refresh lockfile and node_modules and
verify build/dev serves correctly, and if necessary update Tailwind config files
(tailwind.config.*) to any new v4 option names or presets to ensure
compatibility.
kits/assistant/ai-career-copilot/tailwind.config.ts (1)

3-8: ⚠️ Potential issue | 🟠 Major

Mission-critical compatibility check: verify this legacy-style Tailwind config against the kit’s v4 styling standard.

Line 3 onward uses the classic config-file flow. If this kit is enforcing Tailwind v4 CSS-first styling, migrate/bridge with @config + @theme and verify the installed Tailwind version is v4+.

#!/bin/bash
# Verify Tailwind version and styling config mode for this kit (read-only).

set -euo pipefail

echo "== Tailwind version in kit package.json =="
fd -t f "package.json" kits/assistant/ai-career-copilot --exec sh -c '
  echo "--- {} ---"
  jq -r ".dependencies.tailwindcss // .devDependencies.tailwindcss // \"tailwindcss:not-found\"" "{}"
'

echo
echo "== CSS directives related to Tailwind v4/v3 config modes =="
rg -n --iglob '*.css' '@config|@theme|@import\s+"tailwindcss"|@tailwind\s+(base|components|utilities)' kits/assistant/ai-career-copilot

echo
echo "== Tailwind config files present =="
fd -t f 'tailwind.config.*' kits/assistant/ai-career-copilot

Based on learnings: "Applies to kits/**/*.css : Use Tailwind CSS v4+ for styling kits".

Also applies to: 14-47

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/assistant/ai-career-copilot/tailwind.config.ts` around lines 3 - 8, The
tailwind.config.ts uses the legacy "content" config style (see the exported
const config: Config) which must be migrated for kits enforcing Tailwind v4+
CSS-first styling; update the file to adopt the v4 pattern using `@config` and
`@theme` instead of the legacy content array and ensure package.json has
tailwindcss@^4 installed. Specifically, replace the legacy export (const config:
Config = { content: [...] }) with the v4 CSS-first setup using `@config` and
`@theme` entries, update any CSS files to use `@config/`@theme directives (search
for `@tailwind/`@import occurrences), and verify/change the tailwindcss dependency
in package.json to v4+ so the new config syntax is supported.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@kits/assistant/ai-career-copilot/package.json`:
- Line 33: Update the kit's declared Tailwind dependency so it targets Tailwind
CSS v4+ by changing the devDependencies entry for "tailwindcss" (the
"tailwindcss" key in package.json) to a v4-compatible range (for example
"^4.0.0"); after updating, run your package manager install (npm/yarn/pnpm) to
refresh lockfile and node_modules and verify build/dev serves correctly, and if
necessary update Tailwind config files (tailwind.config.*) to any new v4 option
names or presets to ensure compatibility.

In `@kits/assistant/ai-career-copilot/tailwind.config.ts`:
- Around line 3-8: The tailwind.config.ts uses the legacy "content" config style
(see the exported const config: Config) which must be migrated for kits
enforcing Tailwind v4+ CSS-first styling; update the file to adopt the v4
pattern using `@config` and `@theme` instead of the legacy content array and ensure
package.json has tailwindcss@^4 installed. Specifically, replace the legacy
export (const config: Config = { content: [...] }) with the v4 CSS-first setup
using `@config` and `@theme` entries, update any CSS files to use `@config/`@theme
directives (search for `@tailwind/`@import occurrences), and verify/change the
tailwindcss dependency in package.json to v4+ so the new config syntax is
supported.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: b8451d33-6a5c-43f4-bd0a-ec01dd4b2b91

📥 Commits

Reviewing files that changed from the base of the PR and between 31efcc7 and f54152b.

⛔ Files ignored due to path filters (1)
  • kits/assistant/ai-career-copilot/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (3)
  • kits/assistant/ai-career-copilot/package.json
  • kits/assistant/ai-career-copilot/tailwind.config.ts
  • kits/assistant/ai-career-copilot/vercel.json

@github-actions
Copy link
Copy Markdown

Hi @Durvankur-Joshi! 👋

Before this PR can be reviewed by maintainers, please resolve all comments and requested changes from the CodeRabbit automated review.

Steps to follow:

  1. Read through all CodeRabbit comments carefully
  2. Address each issue raised (or reply explaining why you disagree)
  3. Push your fixes as new commits
  4. Once all issues are resolved, comment here so we can re-review

This helps keep the review process efficient for everyone. Thank you! 🙏

@github-actions
Copy link
Copy Markdown

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 30, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

♻️ Duplicate comments (1)
kits/assistant/ai-career-copilot/.env.example (1)

1-4: ⚠️ Potential issue | 🟡 Minor

Mission note: normalize env key ordering to silence dotenv lint churn.

This file is valid, but current key order still triggers UnorderedKey warnings. Reorder for cleaner CI output.

Proposed patch
 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
+LAMATIC_PROJECT_ID=YOUR_PROJECT_ID
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@kits/assistant/ai-career-copilot/.env.example` around lines 1 - 4, The
.env.example triggers UnorderedKey warnings—reorder the environment variable
keys into a normalized, deterministic order (e.g., alphabetically) to silence
the dotenv lint churn; specifically reorder the LAMATIC_* entries so their
sequence is consistent (LAMATIC_API_KEY, LAMATIC_API_URL, LAMATIC_FLOW_ID,
LAMATIC_PROJECT_ID) ensuring the file contains the same keys but in that
normalized order.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@kits/assistant/ai-career-copilot/app/page.tsx`:
- Around line 16-36: The onSubmit type in CareerAnalysisFormProps is declared as
synchronous but handleAnalyze is async; update the CareerAnalysisForm.tsx prop
type for onSubmit (CareerAnalysisFormProps.onSubmit) from (resumeText: string,
domain: string) => void to an async signature that returns Promise<void> so it
matches handleAnalyze and other async handlers, and update any call sites or
default props that assume a synchronous return to handle a Promise if necessary.
- Around line 69-71: The retry currently calls window.location.reload(), which
forces a full page reload and loses component state; change the ErrorMessage
onRetry handler to call the existing handleReset function instead so the error
is cleared and the component can retry without a full reload (update the onRetry
prop on the ErrorMessage in the JSX where the {error && ( ... )} block is
rendered to reference handleReset rather than window.location.reload()).

In `@kits/assistant/ai-career-copilot/components/AnalysisResult.tsx`:
- Line 8: Remove the unused Lightbulb icon import from the lucide-react import
in AnalysisResult.tsx; update the import statement to only import the icons
actually used (TrendingUp and Briefcase) so the unused symbol Lightbulb is
eliminated and the bundle weight reduced.

In `@kits/assistant/ai-career-copilot/components/LoadingSpinner.tsx`:
- Around line 5-16: The loading UI in LoadingSpinner.tsx doesn't announce
progress to assistive tech; update the top-level container (the outer div in the
LoadingSpinner component) to include role="status" and aria-live="polite", and
add a visually-hidden status string (e.g., a <span> with an "sr-only" class or
equivalent) that contains a short readable message like "Loading: analyzing your
career path" so screen readers will announce the loading state; ensure the
visually-hidden element is present inside the same container as the spinner so
it is read immediately.

In `@kits/assistant/ai-career-copilot/components/RoadmapDisplay.tsx`:
- Around line 11-29: Add the same `@radix-ui` packages and versions used by other
kits to this kit's package.json (copy the exact package names and versions from
a canonical kit like kits/automation/blog-automation), run install, and commit
updated lockfile; then refactor RoadmapDisplay.tsx, InterviewQuestions.tsx, and
ProjectsDisplay.tsx to replace raw div/card markup with the equivalent Radix
primitives used across the codebase (use the same primitives and composition
patterns as other kits — e.g., Radix components for cards,
lists/tabs/accordions, separators and accessible focus/keyboard handling),
keeping existing props/behavior (roadmap.map rendering, keys, Lightbulb usage,
empty-state message) intact and updating imports to the new `@radix-ui/react-`*
modules.

In `@kits/assistant/ai-career-copilot/lib/lamatic-client.ts`:
- Around line 3-6: Replace the non-null asserted env reads (endpoint, apiKey,
projectId, flowId) with runtime validation that fails fast: read each variable
via process.env, check for undefined/empty, and throw a descriptive Error
listing the missing variable(s) (or call a small helper like
ensureEnv/getRequiredEnv) in lamatic-client.ts so the application fails
immediately with a clear message if LAMATIC_API_URL, LAMATIC_API_KEY,
LAMATIC_PROJECT_ID, or LAMATIC_FLOW_ID are not set.
- Around line 38-48: The axios.post call that sends { query, variables } to
endpoint must include a hard timeout to avoid hanging requests; update the
request options in the function that calls axios.post in lib/lamatic-client.ts
to add a timeout (e.g., timeout: 5000) to the third-argument config object and
ensure the catch/error path for that function (the surrounding try/catch or the
function that calls post) treats timeout errors distinctly (log/throw a clear
timeout error). Locate the axios.post invocation and add the timeout field to
its config and adjust error handling to detect Axios timeout errors (e.g.,
error.code === 'ECONNABORTED') so callers get a deterministic failure instead of
a hung request.
- Around line 1-56: Replace the custom axios GraphQL wrapper in lamaticClient
with the official Lamatic SDK: import Lamatic and instantiate lamaticClient as
new Lamatic({ endpoint: process.env.LAMATIC_API_URL!, projectId:
process.env.LAMATIC_PROJECT_ID!, apiKey: process.env.LAMATIC_API_KEY! }); then
update the existing executeCareerAnalysis function (and remove manual
flowId/endpoint/apiKey headers usage) to call the SDK flow execution method
(e.g., lamaticClient.executeFlow or lamaticClient.executeWorkflow) passing
flowId and a payload { resume_text: input.resume_text, domain: input.domain },
return the SDK response result (res.data.data.executeWorkflow.result equivalent)
and surface/throw SDK errors as before; ensure you reference flowId when
invoking the SDK and remove the raw axios POST and GraphQL query/variables code.

In `@kits/assistant/ai-career-copilot/package.json`:
- Line 26: The dependency entry for "@tailwindcss/postcss" in package.json is
using a caret range (^4.2.2) instead of a pinned exact version; update that
dependency value to the exact version string (e.g., "4.2.2") so the kit's
package.json contains only pinned versions for reproducible installs and matches
the project's policy that each kit must pin its own dependencies.

---

Duplicate comments:
In `@kits/assistant/ai-career-copilot/.env.example`:
- Around line 1-4: The .env.example triggers UnorderedKey warnings—reorder the
environment variable keys into a normalized, deterministic order (e.g.,
alphabetically) to silence the dotenv lint churn; specifically reorder the
LAMATIC_* entries so their sequence is consistent (LAMATIC_API_KEY,
LAMATIC_API_URL, LAMATIC_FLOW_ID, LAMATIC_PROJECT_ID) ensuring the file contains
the same keys but in that normalized order.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: c606a8ba-07e8-4392-8b8c-b07d6e7cc862

📥 Commits

Reviewing files that changed from the base of the PR and between f54152b and 4b23444.

⛔ Files ignored due to path filters (1)
  • kits/assistant/ai-career-copilot/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (11)
  • kits/assistant/ai-career-copilot/.env.example
  • kits/assistant/ai-career-copilot/app/globals.css
  • kits/assistant/ai-career-copilot/app/page.tsx
  • kits/assistant/ai-career-copilot/components/AnalysisResult.tsx
  • kits/assistant/ai-career-copilot/components/InterviewQuestions.tsx
  • kits/assistant/ai-career-copilot/components/LoadingSpinner.tsx
  • kits/assistant/ai-career-copilot/components/ProjectsDisplay.tsx
  • kits/assistant/ai-career-copilot/components/RoadmapDisplay.tsx
  • kits/assistant/ai-career-copilot/lib/lamatic-client.ts
  • kits/assistant/ai-career-copilot/package.json
  • kits/assistant/ai-career-copilot/postcss.config.js

@Durvankur-Joshi
Copy link
Copy Markdown
Author

Hi maintainers,

The validation workflow is failing due to a GitHub Actions permission issue:

"Resource not accessible by integration (403)"

All validation checks are passing successfully, but the workflow fails when trying to add labels/comments.

Could you please re-run the workflow or merge if everything looks good?

Thanks!

@Durvankur-Joshi
Copy link
Copy Markdown
Author

Hi @d-pamneja,

All requested changes have been addressed and all review conversations are resolved.

I’ve also updated the branch with the latest base.

The validation workflow is still failing due to a GitHub Actions permission issue (403), but all checks themselves are passing.

Kindly review and merge if everything looks good.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants