MCPcopy Index your code
hub / github.com/Mahmud0808/ResumeAI

github.com/Mahmud0808/ResumeAI @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
224 symbols 785 edges 109 files 4 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<img src="https://i.postimg.cc/xnTr6TCb/ResumeAI.png" alt="Project Banner">










<img src="https://img.shields.io/badge/-Next_JS-black?style=for-the-badge&logoColor=white&logo=nextdotjs&color=393D72" alt="nextjs" />
<img src="https://img.shields.io/badge/-MongoDB-black?style=for-the-badge&logoColor=white&logo=mongodb&color=1FAD58" alt="mongodb" />
<img src="https://img.shields.io/badge/-Tailwind_CSS-black?style=for-the-badge&logoColor=white&logo=tailwindcss&color=3FBFF8" alt="tailwindcss" />
<img src="https://img.shields.io/badge/-NextAuth-black?style=for-the-badge&logoColor=white&logo=auth0&color=7C3AFF" alt="nextauth" />
<img src="https://img.shields.io/badge/-Typescript-black?style=for-the-badge&logoColor=white&logo=typescript&color=387CC8" alt="typescript" />
<img src="https://img.shields.io/badge/-Framer_Motion-black?style=for-the-badge&logoColor=white&logo=framer&color=E649A2" alt="framer motion" />

ResumeAI

 <b>ResumeAI</b> is designed to make resume creation effortless. With the help of AI, users can generate, update, and customize their resumes, ensuring they stand out to potential employers. The application is secure, user-friendly, and highly customizable.

➥ Visit ResumeAI App

✨ Features

🤖 AI-Powered Writing

  • AI-Generated Content: Generate professional summaries, work experience descriptions, and education descriptions with Gemini AI — each with multiple suggestions at different experience levels to pick from.
  • One-Click Apply: Click any AI suggestion to drop it straight into the form.

🎨 Templates & Styling

  • Multiple Templates: Choose from a growing collection of professionally designed templates (Classic, Modern, Elegant, Minimal, Sidebar, Executive, Compact, Bold) — each with a live layout thumbnail in the picker.
  • Theme Colors: 14 curated preset colors plus a custom color picker for any brand color you want.
  • Date Formats: 15 date formats covering global conventions — month-year, US, UK/EU, German dotted, ISO, and East Asian styles.
  • Live Preview: Side-by-side editor and preview with instant updates as you type, scaled to fit any screen size.

🧩 Flexible Sections

  • Drag-and-Drop Reordering: Rearrange experience, education, skills, and custom sections by dragging them directly in the preview. Order is saved automatically.
  • Hideable Sections: Hide any built-in section (summary, experience, education, skills) without losing its data.
  • Custom Sections: Add your own sections — certifications, projects, languages, anything — with full rich-text support.
  • Skills, Two Ways: Show skills as rating bars, or as an ATS-friendly plain list with optional groups (Backend, Frontend, Tools, ...).

📄 Sharing & Export

  • ATS-Friendly PDF Export: Download a real vector-text PDF via native print — selectable, parseable text with no non-breaking-space artifacts.
  • Shareable Links: Every resume gets a clean /resume/<id> URL. Resumes are private by default with an opt-in public toggle; old link formats redirect permanently.
  • Web Share: Share your resume URL through the native share sheet.

📊 Dashboard

  • Live Card Previews: Every resume card renders a mini preview of its actual template, theme color, name, and job title — no two cards look the same.
  • Newest First: Recently created resumes appear at the front.
  • Quick Actions: Edit, view, or delete any resume from its card menu.

🔐 Security & Accounts

  • User Authentication: Secure login and registration with NextAuth (Google OAuth + email/password), with brute-force rate limiting (relaxed automatically in development).
  • Email Verification: New email/password accounts confirm ownership via a one-time link before sign-in. Unverified sign-ins are routed to a "check your email" page that re-sends the link — never a dead end.
  • Password Management: Change or set a password from the user menu (current password required), plus a full forgot-password / reset flow over email.
  • Safe Account Linking: Google and email/password sign-ins share one identity per email. Any password set before an email is first verified is dropped on link, preventing account pre-hijacking.
  • Hardened Auth: bcrypt cost-12 hashing, constant-time login (no user-enumeration timing oracle), single-use SHA-256-hashed email tokens with TTL expiry, and enumeration-safe responses.
  • Ownership & Input Safety: Server-side ownership verification on every mutation (private resumes unreadable by non-owners), Zod validation on all server actions, field whitelisting against mass assignment, and prompt-injection-hardened AI calls.

💅 Experience

  • Modern SaaS UI: Glassmorphism, gradient accents, layered shadows, and a fully responsive mobile-first layout.
  • Fluid Animations: Framer Motion page transitions, staggered lists, micro-interactions, and scroll reveals throughout.

⚙️ Tech Stack

  • Framework: Next.js (App Router)

  • Language: TypeScript

  • Authentication: NextAuth (Auth.js v5)

  • Email: Nodemailer (SMTP)

  • AI Integration: Gemini API

  • Styling: Tailwind CSS

  • Animations: Framer Motion

  • Forms & Validation: React Hook Form + Zod

  • Rich Text: Quill

  • Database: MongoDB + Mongoose

  • Testing: Vitest

🚀 Quick Start

Follow these steps to set up the project locally on your machine.

Prerequisites

Make sure you have the following installed on your machine:

Cloning the Repository

git clone https://github.com/Mahmud0808/ResumeAI.git
cd ResumeAI

Installation

Install the project dependencies using npm:

npm install

Set Up Environment Variables

Create a new file named .env.local in the root of your project and add the following content:

# Generate with: npx auth secret
AUTH_SECRET=

# Google Cloud Console -> Credentials -> OAuth client
AUTH_GOOGLE_ID=
AUTH_GOOGLE_SECRET=

MONGODB_URL=

GEMINI_API_KEY=

# Email (SMTP) — verification + password-reset links. Use a DEDICATED mailbox
# (e.g. a Gmail made for the app) so your personal address is never exposed.
# Free, no custom domain needed:
#   Gmail : smtp.gmail.com : 587  (SMTP_PASS = a Google App Password)
#   Brevo : smtp-relay.brevo.com : 587
# If left blank, emails are skipped and the link is logged to the server console.
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASS=
SMTP_FROM=ResumeAI <resumeai.mailer@gmail.com>

BASE_URL=localhost:3000

Replace the placeholder values with your actual credentials. You can obtain these by signing up at Google Cloud Console (OAuth), MongoDB and Google AI Studio. For email, create a dedicated mailbox and generate an App Password (Gmail) or use any SMTP provider. See docs/AUTH_SETUP.md for the full auth setup.

Running the Project

npm run dev

Open http://localhost:3000 in your browser to view the project.

Running Tests

npm test

Building for Production

npm run build

🤝 Contributing

Contributions are welcome! Here's how you can contribute:

  • Fork the repository.
  • Create your feature branch (git checkout -b feature/AmazingFeature).
  • Commit your changes (git commit -m 'Add some AmazingFeature').
  • Push to the branch (git push origin feature/AmazingFeature).
  • Open a pull request.

📢 Notice

Authentication has been migrated from Clerk to NextAuth, removing the previous 500-user cap — registrations are no longer limited. You can use the live app, or fork the repository, set up the environment variables, and run it locally.

📬 Contact

Wanna reach out to me? DM me at 👇

Email: mahmudul15-13791@diu.edu.bd

Extension points exported contracts — how you extend this code

RateLimitDoc (Interface)
* Mongo-backed fixed-window rate limiter. Works on serverless (Vercel) where * in-memory counters do not, and needs no
lib/rateLimit.ts
UserDoc (Interface)
(no doc)
auth.ts
Session (Interface)
(no doc)
types/next-auth.d.ts
FinalResumeViewProps (Interface)
(no doc)
components/layout/ResumeView.tsx
TextareaProps (Interface)
(no doc)
components/ui/textarea.tsx
ProvidersProps (Interface)
(no doc)
components/common/ProgressBarProvider.tsx
TokenDoc (Interface)
(no doc)
lib/tokens.ts
ExperienceFields (Interface)
(no doc)
lib/fields.ts

Core symbols most depended-on inside this repo

toast
called by 48
components/ui/use-toast.ts
cn
called by 38
lib/utils.ts
formatResumeDate
called by 25
lib/utils.ts
handleInputChange
called by 24
lib/context/FormProvider.tsx
useToast
called by 20
components/ui/use-toast.ts
useFormContext
called by 20
lib/context/FormProvider.tsx
rateLimit
called by 18
lib/rateLimit.ts
updateResume
called by 12
lib/actions/resume.actions.ts

Shape

Function 207
Interface 17

Languages

TypeScript100%

Modules by API surface

lib/actions/resume.actions.ts12 symbols
lib/rateLimit.ts10 symbols
lib/actions/auth.actions.ts10 symbols
components/ui/use-toast.ts9 symbols
components/layout/my-resume/templates/BodySections.tsx9 symbols
components/layout/ResumeView.tsx7 symbols
lib/email.ts6 symbols
components/layout/my-resume/forms/ExperienceForm.tsx6 symbols
components/layout/my-resume/forms/EducationForm.tsx6 symbols
lib/tokens.ts5 symbols
lib/context/FormProvider.tsx5 symbols
lib/actions/gemini.actions.ts5 symbols

Datastores touched

EducationCollection · 1 repos
ExperienceCollection · 1 repos
ResumeCollection · 1 repos
SkillCollection · 1 repos
(mongodb)Database · 1 repos

For agents

$ claude mcp add ResumeAI \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact