DEV Community

Qandil Tariq
Qandil Tariq

Posted on

SmartCV: An AI-Powered Resume Analyzer with Jetpack Compose & Kotlin Multiplatform

Job hunting is stressful — tailoring resumes to every job description is even worse.
So I built SmartCV, a mobile app that analyzes your resume and matches it against a job description — highlighting missing skills and suggesting improvements.

Tech Stack

  • Kotlin Multiplatform (KMP) → shared scoring + JD matching logic
  • Jetpack Compose → Android UI
  • PdfBox-Android → PDF parsing
  • Custom NLP-inspired Scoring Engine → resume quality + JD keyword match
  • GitHub Actions CI → build + test automation

Resume Analysis (Core Logic)

`fun analyzeResumeText(text: String): AnalysisResult {
val wordCount = text.split("\s+".toRegex()).size
val verbHits = ACTION_VERBS.count { text.contains(it, ignoreCase = true) }

val score = (verbHits * 10) + (if (wordCount in 400..900) 20 else 0)

return AnalysisResult(
    overallScore = score,
    signals = mapOf("Word Count" to wordCount, "Action Verbs" to verbHits),
    recommendations = buildRecommendations(wordCount, verbHits)
)
Enter fullscreen mode Exit fullscreen mode

}`
This checks word count, action verbs, and generates recommendations like:

“Add more quantified bullets”

“Resume is too long — trim to 2 pages”

Matching with a Job Description

val resumeTokens = tokenize(resumeText).tokens.keys.map(::stem).toSet()
val jdTokens = tokenize(jdText).tokens.keys.map(::stem).toSet()

val present = jdTokens.intersect(resumeTokens)
val matchScore = (present.size.toDouble() / jdTokens.size * 100).roundToInt()
Enter fullscreen mode Exit fullscreen mode

SmartCV computes a match score (%) and highlights missing keywords.
Example: if JD requires CI/CD and DataStore but your resume doesn’t mention them → flagged as gaps.

UI (Jetpack Compose)

  • Circular gauge for overall score
  • Progress bars for sub-scores (word count, verbs, metrics)
  • Chips for matched & missing skills
  • JD Match card with missing keyword suggestions

CI/CD

  • The repo ships with a GitHub Actions workflow:
  • Build & test on every PR
  • Assemble APK & upload as artifact

What’s Next

  • Export to PDF/CSV
  • Add ATS-style scoring (readability, formatting)
  • Extend KMP for iOS

Links

Would love your feedback!
What other features would make this useful for developers/job seekers?

Top comments (0)