{"id":31152,"date":"2025-10-06T12:04:05","date_gmt":"2025-10-06T09:04:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/"},"modified":"2025-10-06T12:04:05","modified_gmt":"2025-10-06T09:04:05","slug":"resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/","title":{"rendered":"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?"},"content":{"rendered":"<p><body><\/p>\n<p>\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen &#8220;Resume Scan AI&#8221; uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i i\u015f d\u00fcnyas\u0131nda, do\u011fru yetenekleri bulmak ve i\u015fe almak, \u015firketlerin ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Geleneksel CV tarama y\u00f6ntemleri genellikle manuel incelemeye dayan\u0131r; bu da zaman kayb\u0131na, \u00f6nyarg\u0131l\u0131 kararlara ve b\u00fcy\u00fck hacimli verilerde bo\u011fulmaya neden olur. \u0130\u015fte tam bu noktada Yapay Zeka (AI) destekli \u00e7\u00f6z\u00fcmler devreye giriyor. Bir Resume Scan AI uygulamas\u0131, sadece anahtar kelimeleri aramakla kalmaz, ayn\u0131 zamanda aday\u0131n deneyimlerini, becerilerini ve potansiyelini anlamak i\u00e7in do\u011fal dil i\u015fleme (NLP) yeteneklerini kullan\u0131r. Bu sayede, \u0130K ekipleri \u00e7ok daha h\u0131zl\u0131, objektif ve do\u011fru kararlar alabilir, b\u00f6ylece en uygun adaylar\u0131 k\u0131sa s\u00fcrede belirleyebilir.<\/p>\n<p>Bu t\u00fcr bir uygulaman\u0131n temel amac\u0131, insan fakt\u00f6r\u00fcnden kaynaklanan hatalar\u0131 ve zaman kayb\u0131n\u0131 minimize ederken, aday havuzunu geni\u015fletmek ve \u00e7e\u015fitlili\u011fi art\u0131rmakt\u0131r. Bir Resume Scan AI, bir CV&#8217;nin i\u00e7eri\u011fini anlar, ilgili bilgileri \u00e7\u0131kar\u0131r (i\u015f deneyimi, e\u011fitim, beceriler gibi), i\u015f tan\u0131m\u0131yla e\u015fle\u015ftirir ve aday\u0131 puanlar. Bu, sadece b\u00fcy\u00fck \u015firketler i\u00e7in de\u011fil, ayn\u0131 zamanda startup&#8217;lar ve KOB\u0130&#8217;ler i\u00e7in de oyunun kurallar\u0131n\u0131 de\u011fi\u015ftirecek bir yakla\u015f\u0131md\u0131r. Uygulama, ba\u015fvuru sahiplerinin CV&#8217;lerini y\u00fckleyebilece\u011fi, yapay zekan\u0131n bunlar\u0131 analiz edebilece\u011fi ve \u0130K profesyonellerinin bu analizleri de\u011ferlendirebilece\u011fi bir aray\u00fcz sunar. Geli\u015ftirece\u011fimiz bu platform, modern web teknolojilerinin g\u00fcc\u00fcn\u00fc en iyi \u015fekilde kullanarak, kullan\u0131c\u0131 dostu, g\u00fcvenli, \u00f6l\u00e7eklenebilir ve ak\u0131ll\u0131 bir \u00e7\u00f6z\u00fcm sunmay\u0131 hedefler. \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli al\u0131mlarda, binlerce CV&#8217;yi elle incelemek insan\u00fcst\u00fc bir \u00e7aba gerektirir ve genellikle g\u00f6zden ka\u00e7an yeteneklere yol a\u00e7ar. Yapay zeka bu s\u00fcreci, yorgunluk, dikkat da\u011f\u0131n\u0131kl\u0131\u011f\u0131 veya \u00f6nyarg\u0131 olmadan, tutarl\u0131 bir \u015fekilde y\u00fcr\u00fctebilir. Bu detayl\u0131 analiz, manuel tarama ile ula\u015f\u0131lamayacak derinlikte i\u00e7g\u00f6r\u00fcler sunar. B\u00f6ylece, \u015firketler sadece en iyi yetenekleri de\u011fil, ayn\u0131 zamanda daha \u00e7e\u015fitli ve kapsay\u0131c\u0131 bir i\u015f g\u00fcc\u00fc elde edebilirler.<\/p>\n<h2>Temel Teknolojiler: Next.js 15, Tailwind CSS ve Shadcn\/ui Nedir ve Neden Tercih Edilmelidir?<\/h2>\n<p>Modern bir web uygulamas\u0131 geli\u015ftirirken do\u011fru teknoloji y\u0131\u011f\u0131n\u0131n\u0131 se\u00e7mek, projenin ba\u015far\u0131s\u0131 i\u00e7in hayati \u00f6neme sahiptir. &#8220;Resume Scan AI&#8221; uygulamam\u0131z\u0131n temelinde, geli\u015ftirici deneyimini optimize eden ve y\u00fcksek performans sunan g\u00fc\u00e7l\u00fc ara\u00e7lar yat\u0131yor. Bu b\u00f6l\u00fcmde, Next.js 15, Tailwind CSS ve Shadcn\/ui&#8217;nin ne oldu\u011funu, temel \u00f6zelliklerini ve bu projede neden kritik rol oynad\u0131klar\u0131n\u0131 detayl\u0131ca inceleyece\u011fiz.<\/p>\n<ul>\n<li><strong>Next.js 15:<\/strong> React tabanl\u0131, full-stack web geli\u015ftirme framework&#8217;\u00fcd\u00fcr. 15. s\u00fcr\u00fcm\u00fcyle Sunucu Bile\u015fenleri (Server Components) \u00f6zelli\u011fi, uygulaman\u0131n bir k\u0131sm\u0131n\u0131 sunucuda render ederek daha h\u0131zl\u0131 y\u00fckleme s\u00fcreleri ve daha iyi SEO performans\u0131 sunar. \u0130maj ve font optimizasyonlar\u0131 gibi otomatik \u00f6zellikler uygulaman\u0131n h\u0131z\u0131n\u0131 art\u0131r\u0131r. Dosya tabanl\u0131 y\u00f6nlendirme ve API yollar\u0131 sayesinde hem frontend hem de backend mant\u0131\u011f\u0131n\u0131 tek bir projede y\u00f6netmek kolayla\u015f\u0131r, bu da geli\u015ftirme s\u00fcrecini basitle\u015ftirir ve \u00f6l\u00e7eklenebilirlik sa\u011flar.<\/li>\n<li><strong>Tailwind CSS:<\/strong> Bir &#8220;utility-first&#8221; CSS framework&#8217;\u00fcd\u00fcr. Kendi \u00f6zel CSS&#8217;inizi yazmak yerine, \u00f6nceden tan\u0131mlanm\u0131\u015f k\u00fc\u00e7\u00fck, tek kullan\u0131ml\u0131k CSS s\u0131n\u0131flar\u0131n\u0131 do\u011frudan HTML etiketlerine ekleyerek stil olu\u015fturursunuz. Bu yakla\u015f\u0131m, tasar\u0131mlar\u0131 \u00e7ok daha h\u0131zl\u0131 olu\u015fturman\u0131z\u0131, tasar\u0131m sisteminizi tutarl\u0131 bir \u015fekilde uygulaman\u0131z\u0131 ve \u00fcretim derlemesi s\u0131ras\u0131nda sadece kullan\u0131lan s\u0131n\u0131flar\u0131 i\u00e7eren optimize edilmi\u015f bir CSS dosyas\u0131 \u00fcreterek daha k\u00fc\u00e7\u00fck dosya boyutlar\u0131 elde etmenizi sa\u011flar.<\/li>\n<li><strong>Shadcn\/ui:<\/strong> Bile\u015fen k\u00fct\u00fcphanelerinden farkl\u0131 olarak, ihtiyac\u0131n\u0131z olan bile\u015fenlerin kodunu do\u011frudan projenize kopyalaman\u0131z\u0131 sa\u011flar. Bu, size tam kontrol sunar, her bile\u015feni kendi ihtiya\u00e7lar\u0131n\u0131za g\u00f6re tamamen \u00f6zelle\u015ftirebilirsiniz. Bile\u015fenler, eri\u015filebilirlik standartlar\u0131 (WCAG) g\u00f6z \u00f6n\u00fcnde bulundurularak tasarlanm\u0131\u015ft\u0131r ve Tailwind CSS \u00fczerine in\u015fa edildi\u011fi i\u00e7in mevcut Tailwind temalar\u0131n\u0131za sorunsuz bir \u015fekilde entegre olur. Geli\u015ftiricilerin UI tasar\u0131m\u0131na harcad\u0131klar\u0131 zaman\u0131 azaltarak temel i\u015f mant\u0131\u011f\u0131na odaklanmalar\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>\u00d6rnek bir Next.js API Route kodu:<\/p>\n<pre><code>\n\/\/ pages\/api\/upload-resume.js\nimport { IncomingForm } from 'formidable';\nimport path from 'path';\n\nexport const config = { api: { bodyParser: false } }; \/\/ Formidable kendi body parser'\u0131n\u0131 kullan\u0131r\n\nexport default async function handler(req, res) {\n  if (req.method !== 'POST') return res.status(405).json({ message: 'Sadece POST istekleri kabul edilir.' });\n  const form = new IncomingForm({ uploadDir: path.join(process.cwd(), 'public\/uploads'), keepExtensions: true, maxFileSize: 5 * 1024 * 1024 });\n  try {\n    const [fields, files] = await form.parse(req);\n    const resumeFile = files.resume[0];\n    console.log('Y\u00fcklenen dosya:', resumeFile.filepath);\n    res.status(200).json({ message: 'CV ba\u015far\u0131yla y\u00fcklendi!', filename: resumeFile.newFilename });\n  } catch (error) {\n    console.error('Dosya y\u00fckleme hatas\u0131:', error);\n    res.status(500).json({ message: 'CV y\u00fcklenirken bir hata olu\u015ftu.' });\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Next.js projelerinizde hem frontend hem de backend mant\u0131\u011f\u0131n\u0131 tek bir monorepo i\u00e7inde y\u00f6netmek i\u00e7in App Router'\u0131n API Routes \u00f6zelli\u011fini aktif olarak kullan\u0131n. Bu, geli\u015ftirme h\u0131z\u0131n\u0131z\u0131 art\u0131r\u0131r ve kod taban\u0131n\u0131z\u0131n tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flar.\n    <\/div>\n<h2>G\u00fcvenli Kimlik Do\u011frulama: BetterAuth ile Kullan\u0131c\u0131 Y\u00f6netimi Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>Herhangi bir web uygulamas\u0131n\u0131n temel ta\u015flar\u0131ndan biri, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 ve yetkilendirmesidir. Kullan\u0131c\u0131lar\u0131n g\u00fcvenli bir \u015fekilde giri\u015f yapabildi\u011fi, profillerini y\u00f6netebildi\u011fi ve yaln\u0131zca yetkili olduklar\u0131 verilere eri\u015febildi\u011fi bir sistem kurmak hayati \u00f6nem ta\u015f\u0131r. Resume Scan AI uygulamam\u0131zda bu kritik g\u00f6revi \u00fcstlenmek \u00fczere BetterAuth'u tercih ettik. BetterAuth, geli\u015ftiricilere kimlik do\u011frulama s\u00fcre\u00e7lerini basitle\u015ftiren ve g\u00fc\u00e7lendiren bir hizmet sunar. Kullan\u0131c\u0131 kayd\u0131, giri\u015f, \u015fifre s\u0131f\u0131rlama, iki fakt\u00f6rl\u00fc kimlik do\u011frulama (2FA) ve e-posta do\u011frulama gibi karma\u015f\u0131k ad\u0131mlar\u0131 y\u00f6netir. BetterAuth, g\u00fcvenlik a\u00e7\u0131klar\u0131 ve uyumluluk endi\u015felerini ortadan kald\u0131rarak, geli\u015ftiricilerin sadece birka\u00e7 API \u00e7a\u011fr\u0131s\u0131yla sa\u011flam ve g\u00fcvenli bir kimlik do\u011frulama sistemi kurmalar\u0131na olanak tan\u0131r. Ayr\u0131ca, e-posta\/\u015fifre ile kay\u0131t olmaktan, sosyal medya (Google, GitHub vb.) entegrasyonlar\u0131na kadar geni\u015f bir yelpazede kimlik do\u011frulama y\u00f6ntemleri sunar.<\/p>\n<p>BetterAuth'un sundu\u011fu avantajlar aras\u0131nda h\u0131zl\u0131 entegrasyon, sa\u011flam g\u00fcvenlik, \u00f6l\u00e7eklenebilirlik, kullan\u0131c\u0131 y\u00f6netimi ve \u00e7oklu oturum a\u00e7ma se\u00e7enekleri yer al\u0131r. Next.js API Routes kullan\u0131larak BetterAuth entegrasyonu, hassas bilgilerin istemci taraf\u0131nda a\u00e7\u0131\u011fa \u00e7\u0131kmas\u0131n\u0131 engeller ve g\u00fcvenli\u011fi art\u0131r\u0131r. Bu entegrasyon sayesinde, geli\u015ftiriciler kimlik do\u011frulama altyap\u0131s\u0131 kurma ve s\u00fcrd\u00fcrme y\u00fck\u00fcnden kurtularak, uygulaman\u0131n ana \u00f6zelli\u011fi olan yapay zeka destekli CV analizine odaklanabilirler. Bu, projenin pazara \u00e7\u0131k\u0131\u015f s\u00fcresini h\u0131zland\u0131r\u0131r ve uzun vadede bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<pre><code>\n\/\/ pages\/api\/auth\/register.js\nimport BetterAuthClient from 'betterauth-sdk';\n\nconst betterAuth = new BetterAuthClient({\n  apiKey: process.env.BETTERAUTH_API_KEY,\n  apiSecret: process.env.BETTERAUTH_API_SECRET,\n});\n\nexport default async function handler(req, res) {\n  if (req.method !== 'POST') return res.status(405).json({ message: 'Sadece POST istekleri kabul edilir.' });\n  const { email, password } = req.body;\n  try {\n    const user = await betterAuth.register({ email, password });\n    res.status(200).json({ message: 'Kay\u0131t ba\u015far\u0131l\u0131!', userId: user.id });\n  } catch (error) {\n    console.error('Kay\u0131t hatas\u0131:', error);\n    res.status(500).json({ message: 'Kay\u0131t i\u015flemi s\u0131ras\u0131nda bir hata olu\u015ftu.', error: error.message });\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<h2>Yapay Zeka G\u00fcc\u00fc: OpenAI API ile CV Analizi ve Vaka Analizi<\/h2>\n<p>Resume Scan AI uygulamam\u0131z\u0131n kalbi, \u015f\u00fcphesiz OpenAI API entegrasyonudur. Bu b\u00f6l\u00fcmde, CV'lerin metinlerini anlamak, anahtar bilgileri \u00e7\u0131karmak, g\u00fc\u00e7l\u00fc ve zay\u0131f y\u00f6nleri belirlemek ve hatta bir i\u015f tan\u0131m\u0131yla ne kadar uyumlu oldu\u011funu de\u011ferlendirmek i\u00e7in OpenAI'\u0131n geli\u015fmi\u015f yapay zeka modellerini nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. \u00d6zellikle GPT serisi modelleri, do\u011fal dili anlama ve \u00fcretme yetenekleriyle bu t\u00fcr bir uygulama i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r.<\/p>\n<p>OpenAI API'sini kullanmak, metin tabanl\u0131 verileri i\u015flemek i\u00e7in olduk\u00e7a esnek bir yol sunar. Bir CV'yi analiz etmek i\u00e7in genellikle iki ana ad\u0131m\u0131 izleriz: metin i\u00e7eri\u011fini CV dosyalar\u0131ndan \u00e7\u0131karmak (\u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphanelerle) ve \u00e7\u0131kar\u0131lan metni OpenAI'\u0131n GPT modellerine g\u00f6ndererek yap\u0131land\u0131r\u0131lm\u0131\u015f bilgiler almak. Bu s\u00fcre\u00e7teki en kritik bile\u015fenlerden biri <strong>Prompt M\u00fchendisli\u011fi<\/strong>'dir. Yani, yapay zekaya ne istedi\u011fimizi ne kadar a\u00e7\u0131k ve do\u011fru bir \u015fekilde anlat\u0131rsak, o kadar iyi sonu\u00e7lar al\u0131r\u0131z. Etkili bir prompt, yapay zekan\u0131n rol\u00fcn\u00fc tan\u0131mlar, ne t\u00fcr bilgiler \u00e7\u0131kar\u0131laca\u011f\u0131n\u0131 belirtir, \u00e7\u0131kt\u0131n\u0131n format\u0131n\u0131 belirler ve ek analiz kriterleri sunar (i\u015f tan\u0131m\u0131yla uyum, g\u00fc\u00e7l\u00fc\/zay\u0131f y\u00f6nler gibi). \u00d6rne\u011fin, b\u00fcy\u00fck bir uluslararas\u0131 dan\u0131\u015fmanl\u0131k firmas\u0131, her ay binlerce i\u015f ba\u015fvurusunu i\u015flemek i\u00e7in mevcut manuel sistemlerinin yetersiz kald\u0131\u011f\u0131n\u0131 fark etti. Mevcut \"Resume Scan AI\" prototipimiz temel al\u0131narak \u00f6zel bir entegrasyon projesi ba\u015flat\u0131ld\u0131. Bu projede, OpenAI API'sinin esnekli\u011fi kullan\u0131larak, farkl\u0131 pozisyonlar i\u00e7in \u00f6zelle\u015ftirilmi\u015f prompt modelleri olu\u015fturuldu. Bu, firman\u0131n i\u015fe al\u0131m s\u00fcresini %60 oran\u0131nda azaltt\u0131 ve daha nitelikli adaylar\u0131n m\u00fclakat a\u015famas\u0131na ge\u00e7mesini sa\u011flad\u0131.<\/p>\n<pre><code>\n\/\/ pages\/api\/analyze-resume.js\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });\n\nexport default async function handler(req, res) {\n  if (req.method !== 'POST') return res.status(405).json({ message: 'Sadece POST istekleri kabul edilir.' });\n  const { resumeText, jobDescription } = req.body;\n  if (!resumeText) return res.status(400).json({ message: 'CV metni eksik.' });\n\n  const prompt = <code>A\u015fa\u011f\u0131daki CV metnini analiz et ve JSON format\u0131nda yap\u0131land\u0131r\u0131lm\u0131\u015f bilgi \u00e7\u0131kar. \u0130\u015f Tan\u0131m\u0131: ${jobDescription || &#039;Belirtilmedi.&#039;}\n    Aday\u0131n bilgilerini, deneyimlerini, becerilerini ve i\u015f tan\u0131m\u0131yla uyumunu de\u011ferlendir. \u00c7\u0131kt\u0131 \u015fu formatta olmal\u0131: { \"ad_soyad\": \"...\", \"iletisim\": { \"email\": \"...\" }, \"egitim\": [], \"deneyim\": [], \"beceriler\": [], \"ozet_analiz\": \"...\", \"ise_uygunluk_puani\": \"1-10 aras\u0131 puan\", \"guclu_yonler\": [], \"gelistirilecek_alanlar\": [] }\n    CV Metni: \"${resumeText}\"<\/code>;\n\n  try {\n    const response = await openai.chat.completions.create({\n      model: \"gpt-4o\", messages: [{ role: \"user\", content: prompt }], response_format: { type: \"json_object\" }, temperature: 0.2,\n    });\n    const analysisResult = JSON.parse(response.choices[0].message.content);\n    res.status(200).json(analysisResult);\n  } catch (error) {\n    console.error('OpenAI API hatas\u0131:', error);\n    res.status(500).json({ message: 'CV analizi s\u0131ras\u0131nda bir hata olu\u015ftu.', error: error.message });\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Prompt m\u00fchendisli\u011finde en iyi sonu\u00e7lar\u0131 almak i\u00e7in \"chain of thought\" tekni\u011fini kullan\u0131n. Yapay zekadan do\u011frudan cevab\u0131 vermek yerine, cevaba nas\u0131l ula\u015fmas\u0131 gerekti\u011fini ad\u0131m ad\u0131m a\u00e7\u0131klamas\u0131n\u0131 isteyin. Bu, karma\u015f\u0131k analizlerde do\u011frulu\u011fu art\u0131r\u0131r ve <code>response_format: { type: \"json_object\" }<\/code> ile \u00e7\u0131kt\u0131n\u0131n her zaman ge\u00e7erli bir JSON olmas\u0131n\u0131 garantiler.\n    <\/div>\n<h2>Arka Plan \u0130\u015flemleri ve \u00d6l\u00e7eklenebilirlik: Inngest ile Olay Odakl\u0131 Mimari Nas\u0131l Kurulur?<\/h2>\n<p>Resume Scan AI uygulamam\u0131zda, kullan\u0131c\u0131 bir CV y\u00fckledi\u011finde veya bir analiz ba\u015flatt\u0131\u011f\u0131nda, bu i\u015flem an\u0131nda sonu\u00e7lanmayabilir. \u00d6zellikle OpenAI API \u00e7a\u011fr\u0131lar\u0131, dosya i\u015fleme ve veritaban\u0131 yazma gibi i\u015flemler zaman al\u0131c\u0131 olabilir. Bu t\u00fcr senaryolarda, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn donmas\u0131n\u0131 veya kullan\u0131c\u0131n\u0131n beklemek zorunda kalmas\u0131n\u0131 \u00f6nlemek i\u00e7in asenkron (e\u015fzamans\u0131z) ve olay odakl\u0131 bir mimariye ihtiya\u00e7 duyar\u0131z. \u0130\u015fte bu noktada Inngest devreye giriyor. Inngest, geli\u015ftiricilere karma\u015f\u0131k arka plan g\u00f6revlerini, cron i\u015flerini ve olay tabanl\u0131 i\u015f ak\u0131\u015flar\u0131n\u0131 kolayca olu\u015fturma ve y\u00f6netme imkan\u0131 sunan bir sunucusuz (serverless) i\u015f ak\u0131\u015f\u0131 platformudur. Inngest, bu sorunu bir olay kuyru\u011fu (event queue) ve i\u015f ak\u0131\u015flar\u0131 (workflows) konseptiyle \u00e7\u00f6zer. Kullan\u0131c\u0131 bir olay tetikledi\u011finde, Inngest bu olay\u0131 al\u0131r ve \u00f6nceden tan\u0131mlanm\u0131\u015f bir i\u015f ak\u0131\u015f\u0131n\u0131 tetikler. Bu i\u015f ak\u0131\u015f\u0131, arka planda s\u0131rayla veya paralel olarak \u00e7e\u015fitli ad\u0131mlar\u0131 y\u00fcr\u00fct\u00fcr (metin \u00e7\u0131karma, OpenAI \u00e7a\u011fr\u0131s\u0131, veritaban\u0131na kaydetme, bildirim g\u00f6nderme). Bu i\u015flemler kullan\u0131c\u0131 aray\u00fcz\u00fcnden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, kullan\u0131c\u0131 an\u0131nda bir onay mesaj\u0131 al\u0131r ve di\u011fer i\u015flemlere devam edebilir.<\/p>\n<p>Inngest kullanman\u0131n Resume Scan AI uygulamas\u0131 i\u00e7in sundu\u011fu kritik avantajlar aras\u0131nda \u00f6l\u00e7eklenebilirlik (y\u00fcksek say\u0131da e\u015fzamanl\u0131 y\u00fcklemede sistemi korur), g\u00fcvenilirlik ve hata y\u00f6netimi (otomatik yeniden denemeler), geli\u015ftirici deneyimi (SDK ile kolay i\u015f ak\u0131\u015f\u0131 tan\u0131m\u0131), g\u00f6rsel denetim (panel ile izleme) ve maliyet etkinli\u011fi (sunucusuz oldu\u011fu i\u00e7in kulland\u0131\u011f\u0131n\u0131z kadar \u00f6deme) yer al\u0131r. Bu yap\u0131, uygulaman\u0131n hem performans\u0131n\u0131 hem de g\u00fcvenilirli\u011fini art\u0131r\u0131rken, geli\u015ftiricilerin karma\u015f\u0131k arka plan s\u00fcre\u00e7lerini daha y\u00f6netilebilir bir \u015fekilde tasarlamas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code>\n\/\/ inngest\/functions.ts\nimport { Inngest } from 'inngest';\nimport OpenAI from 'openai';\nimport { extractTextFromPdf } from '..\/lib\/pdf-parser';\n\nexport const inngest = new Inngest({ id: 'resume-scan-app' });\nconst openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });\n\nexport const analyzeResume = inngest.createFunction(\n  { id: 'analyze-resume-cv' }, { event: 'app\/cv.uploaded' },\n  async ({ event, step }) => {\n    const { userId, resumeUrl, jobId } = event.data;\n    const resumeText = await step.run('extract-text', async () => await extractTextFromPdf(resumeUrl));\n    const analysisResult = await step.run('call-openai-analysis', async () => {\n      const jobDescription = await fetchJobDescription(jobId);\n      const prompt = <code>Analiz et: \"${resumeText}\". \u0130\u015f tan\u0131m\u0131: \"${jobDescription}\". JSON d\u00f6n.<\/code>;\n      const response = await openai.chat.completions.create({\n        model: \"gpt-4o\", messages: [{ role: \"user\", content: prompt }], response_format: { type: \"json_object\" }, temperature: 0.2,\n      });\n      return JSON.parse(response.choices[0].message.content);\n    });\n    await step.run('save-analysis-to-db', async () => console.log(<code>Analiz sonucu kaydedildi: Kullan\u0131c\u0131 ${userId}<\/code>));\n    await step.run('send-user-notification', async () => console.log(<code>Kullan\u0131c\u0131 ${userId} i\u00e7in analiz tamamland\u0131 bildirimi g\u00f6nderildi.<\/code>));\n    return { success: true, analysis: analysisResult };\n  }\n);\n    <\/pre>\n<p><\/code><\/p>\n<h2>Uygulama Geli\u015ftirme Ad\u0131mlar\u0131: U\u00e7tan Uca Bir Resume Scan AI Nas\u0131l \u0130n\u015fa Edilir?<\/h2>\n<p>\u015eimdiye kadar ele ald\u0131\u011f\u0131m\u0131z teknolojilerin her birini derinlemesine inceledik. Art\u0131k bu par\u00e7alar\u0131 bir araya getirerek, fonksiyonel bir Resume Scan AI uygulamas\u0131n\u0131 ad\u0131m ad\u0131m nas\u0131l in\u015fa edece\u011fimize odaklanabiliriz. Bu b\u00f6l\u00fcm, projenin ba\u015flang\u0131c\u0131ndan temel \u00f6zelliklerin hayata ge\u00e7irilmesine kadar pratik bir rehber sunacakt\u0131r.<\/p>\n<ol>\n<li><strong>Proje Kurulumu ve Temel Yap\u0131land\u0131rma:<\/strong> Next.js 15 projesini ba\u015flat\u0131n: <code>npx create-next-app@latest resume-scan-ai --ts --app --tailwind --eslint<\/code>. BetterAuth, OpenAI, Inngest SDK'lar\u0131n\u0131 kurun: <code>npm install betterauth-sdk openai inngest @inngest\/nextjs<\/code>. Shadcn\/ui bile\u015fenlerini eklemek i\u00e7in <code>npx shadcn-ui@latest init<\/code> ve <code>npx shadcn-ui@latest add button card form input label dialog<\/code> komutlar\u0131n\u0131 kullan\u0131n. <code>.env.local<\/code> dosyas\u0131nda API anahtarlar\u0131n\u0131z\u0131 saklay\u0131n.<\/li>\n<li><strong>Kimlik Do\u011frulama Entegrasyonu (BetterAuth):<\/strong> Next.js API Routes (<code>\/app\/api\/auth\/register\/route.ts<\/code>, <code>\/app\/api\/auth\/login\/route.ts<\/code>) kullanarak BetterAuth SDK's\u0131n\u0131 sunucu taraf\u0131nda \u00e7a\u011f\u0131r\u0131n. Shadcn\/ui'nin <code>Form<\/code> ve <code>Input<\/code> bile\u015fenleriyle kullan\u0131c\u0131 formlar\u0131n\u0131 olu\u015fturun ve BetterAuth'un oturum mekanizmalar\u0131n\u0131 kullanarak kullan\u0131c\u0131 durumunu y\u00f6netin.<\/li>\n<li><strong>CV Y\u00fckleme ve Metin \u00c7\u0131karma:<\/strong> Kullan\u0131c\u0131n\u0131n CV y\u00fcklemesi i\u00e7in bir form olu\u015fturun ve Next.js API Route'a (<code>\/app\/api\/upload-cv\/route.ts<\/code>) bir <code>multipart\/form-data<\/code> iste\u011fi g\u00f6nderin. Sunucu taraf\u0131nda, <code>formidable<\/code> gibi bir k\u00fct\u00fcphane kullanarak dosyay\u0131 yakalay\u0131n ve g\u00fcvenli bir depolama alan\u0131na kaydedin. Ard\u0131ndan, <code>pdf-parse<\/code> veya <code>mammoth.js<\/code> gibi k\u00fct\u00fcphanelerle metin i\u00e7eri\u011fini \u00e7\u0131kar\u0131n.<\/li>\n<li><strong>OpenAI ile CV Analizi ve Inngest Entegrasyonu:<\/strong> Metin \u00e7\u0131kar\u0131ld\u0131ktan sonra, bu metni OpenAI API'sine g\u00f6nderme ve sonu\u00e7lar\u0131 i\u015fleme ad\u0131m\u0131n\u0131 Inngest ile asenkron hale getirin. CV y\u00fckleme API'niz, metin \u00e7\u0131kar\u0131ld\u0131ktan sonra Inngest'e bir olay (<code>app\/cv.uploaded<\/code>) g\u00f6ndermelidir. Inngest fonksiyonunuz, bu olay\u0131 yakalayacak, OpenAI API'sini \u00e7a\u011f\u0131racak, prompt m\u00fchendisli\u011fini uygulayacak ve analiz sonu\u00e7lar\u0131n\u0131 bir veritaban\u0131na kaydedecektir.<\/li>\n<li><strong>Sonu\u00e7lar\u0131n G\u00f6r\u00fcnt\u00fclenmesi ve Kullan\u0131c\u0131 Aray\u00fcz\u00fc (UI):<\/strong> Analiz sonu\u00e7lar\u0131n\u0131 veritaban\u0131na kaydettikten sonra, frontend'de bu sonu\u00e7lar\u0131 \u00e7ekmek ve kullan\u0131c\u0131ya sunmak i\u00e7in bir aray\u00fcz geli\u015ftirin. Next.js'in veri getirme yeteneklerini kullanarak, ilgili kullan\u0131c\u0131n\u0131n CV analiz raporlar\u0131n\u0131 getirin. Shadcn\/ui'nin <code>Card<\/code>, <code>Table<\/code> veya <code>Dialog<\/code> bile\u015fenlerini kullanarak okunabilir, d\u00fczenli ve bilgilendirici bir rapor ekran\u0131 tasarlay\u0131n.<\/li>\n<\/ol>\n<pre><code>\n\/\/ lib\/pdf-parser.ts (\u00f6rnek)\nimport pdf from 'pdf-parse';\nimport fs from 'fs\/promises';\n\nexport async function extractTextFromPdf(filePath: string): Promise<string> {\n  const dataBuffer = await fs.readFile(filePath);\n  const data = await pdf(dataBuffer);\n  return data.text;\n}\n    <\/pre>\n<p><\/code><\/p>\n<pre><code>\n\/\/ app\/api\/upload-cv\/route.ts (\u00d6rnek - Inngest olay\u0131 g\u00f6nderme k\u0131sm\u0131)\nimport { inngest } from '@\/inngest\/client'; \/\/ Inngest client'\u0131n\u0131z\u0131 import edin\n\n\/\/ ... (dosya y\u00fckleme ve metin \u00e7\u0131karma mant\u0131\u011f\u0131) ...\n\n  await inngest.send({\n    name: 'app\/cv.uploaded',\n    data: { userId: req.user.id, resumeUrl: uploadedFilePath, jobId: 'some-job-id' },\n  });\n  return NextResponse.json({ message: 'CV y\u00fcklendi ve analiz s\u0131raya al\u0131nd\u0131.' });\n    <\/pre>\n<p><\/code><\/p>\n<h2>Mobil Uyumlu Tasar\u0131m ve Performans \u0130pu\u00e7lar\u0131<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131nda, kullan\u0131c\u0131lar\u0131n web sitelerine ve uygulamalar\u0131na farkl\u0131 cihazlardan eri\u015fti\u011fi bir ger\u00e7ek. Bu nedenle, geli\u015ftirdi\u011fimiz Resume Scan AI uygulamas\u0131n\u0131n masa\u00fcst\u00fc bilgisayarlardan tablet ve ak\u0131ll\u0131 telefonlara kadar her ekran boyutunda sorunsuz bir deneyim sunmas\u0131 hayati \u00f6nem ta\u015f\u0131r. Tailwind CSS ve Next.js'in sa\u011flad\u0131\u011f\u0131 ara\u00e7larla mobil uyumlu (responsive) ve y\u00fcksek performansl\u0131 bir uygulama in\u015fa etmek olduk\u00e7a kolayd\u0131r.<\/p>\n<p>Tailwind CSS, mobil uyumlu tasar\u0131mlar olu\u015fturmay\u0131 basitle\u015ftiren \u00f6nceden tan\u0131mlanm\u0131\u015f breakpoint'lere sahiptir. Bu breakpoint'ler (<code>sm:<\/code>, <code>md:<\/code>, <code>lg:<\/code> gibi \u00f6nekler), farkl\u0131 ekran boyutlar\u0131na g\u00f6re elementlerin stilini de\u011fi\u015ftirmek i\u00e7in kullan\u0131l\u0131r ve manuel CSS media query'leri yazma ihtiyac\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ortadan kald\u0131r\u0131r. Nadiren de olsa, do\u011frudan CSS media query kullanman\u0131z gerekebilir:<\/p>\n<pre><code>\n\/* globals.css *\/\n@media (max-width: 768px) {\n  .custom-mobile-hidden {\n    display: none;\n  }\n}\n<div class=\"custom-mobile-hidden lg:block\">Sadece b\u00fcy\u00fck ekranlarda g\u00f6r\u00fcn\u00fcr.<\/div>\n    <\/pre>\n<p><\/code><\/p>\n<p>Performans ipu\u00e7lar\u0131 aras\u0131nda g\u00f6rsel optimizasyon i\u00e7in Next.js'in <code>next\/image<\/code> bile\u015feni, otomatik kod b\u00f6l\u00fcmleme, performans kritik sayfalar i\u00e7in Sunucu Taraf\u0131 Renderlama (SSR) veya Statik Site \u00dcretimi (SSG), s\u0131k de\u011fi\u015fmeyen veriler i\u00e7in API isteklerinin \u00f6nbelle\u011fe al\u0131nmas\u0131, asenkron i\u015flemler i\u00e7in Inngest kullan\u0131m\u0131 ve m\u00fcmk\u00fcn oldu\u011funca az istemci taraf\u0131 JavaScript kullan\u0131m\u0131 yer al\u0131r. Bu ipu\u00e7lar\u0131 sayesinde, Resume Scan AI uygulaman\u0131z hem her cihazda harika g\u00f6r\u00fcnecek hem de kullan\u0131c\u0131lara h\u0131zl\u0131 ve ak\u0131c\u0131 bir deneyim sunacakt\u0131r.<\/p>\n<h2>Sonu\u00e7: Gelece\u011fin \u0130\u015fe Al\u0131m S\u00fcre\u00e7lerinde Yapay Zekan\u0131n Rol\u00fc<\/h2>\n<p>\"Resume Scan AI\" uygulamas\u0131, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojilerin bir araya gelmesiyle nas\u0131l g\u00fc\u00e7l\u00fc, \u00f6l\u00e7eklenebilir ve ak\u0131ll\u0131 bir \u00e7\u00f6z\u00fcm yarat\u0131labilece\u011fini g\u00f6zler \u00f6n\u00fcne serdi. \u0130\u015fe al\u0131m s\u00fcre\u00e7lerinin manuel y\u00fck\u00fcn\u00fc azaltmaktan, daha objektif ve veriye dayal\u0131 kararlar almaya kadar, yapay zeka destekli CV tarama sistemleri, \u0130K departmanlar\u0131n\u0131n gelece\u011finde \u00f6nemli bir rol oynayacakt\u0131r. Geli\u015ftirdi\u011fimiz bu uygulama, sadece anahtar kelimeleri e\u015fle\u015ftirmekle kalmay\u0131p, do\u011fal dil i\u015fleme yetenekleriyle CV'lerin ger\u00e7ek anlam\u0131n\u0131 anlayabilen, adaylar\u0131n potansiyelini ortaya \u00e7\u0131karabilen ve \u015firketlerin do\u011fru yeteneklere ula\u015fmas\u0131na yard\u0131mc\u0131 olan bir ara\u00e7t\u0131r.<\/p>\n<p>Bu makalede, projenin mimarisinden her bir teknoloji bile\u015feninin detaylar\u0131na, pratik kurulum ad\u0131mlar\u0131ndan performans optimizasyonlar\u0131na kadar geni\u015f bir yelpazeyi ele ald\u0131k. Modern web geli\u015ftirme pratiklerini benimseyerek, g\u00fcvenli kimlik do\u011frulamas\u0131ndan asenkron arka plan i\u015flemlerine, \u015f\u0131k kullan\u0131c\u0131 aray\u00fcz\u00fcnden g\u00fc\u00e7l\u00fc yapay zeka analizine kadar her y\u00f6n\u00fcyle eksiksiz bir \u00e7\u00f6z\u00fcm sunduk. Gelecekte, bu t\u00fcr uygulamalar i\u015fe al\u0131m s\u00fcre\u00e7lerini daha adil, verimli ve h\u0131zl\u0131 hale getirerek insan kaynaklar\u0131 profesyonellerinin stratejik g\u00f6revlere daha fazla odaklanmas\u0131n\u0131 sa\u011flayacakt\u0131r. Yapay zeka ile desteklenen i\u015fe al\u0131m \u00e7\u00f6z\u00fcmleri, \u015firketlerin yetenek sava\u015f\u0131nda \u00f6ne ge\u00e7meleri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmektedir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n            <strong>Next.js 15'in eski s\u00fcr\u00fcmlerden fark\u0131 nedir ve neden \u00f6nemlidir?<\/strong><\/p>\n<p>Next.js 15, \u00f6zellikle Sunucu Bile\u015fenleri'nin (Server Components) kararl\u0131 hale gelmesi ve daha geli\u015fmi\u015f veri getirme (data fetching) optimizasyonlar\u0131 ile \u00f6ne \u00e7\u0131kar. Bu, uygulaman\u0131n daha h\u0131zl\u0131 y\u00fcklenmesini, daha iyi SEO performans\u0131na sahip olmas\u0131n\u0131 ve daha az istemci taraf\u0131 JavaScript kodu g\u00f6ndermesini sa\u011flar. Performans ve geli\u015ftirici deneyimi a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck avantajlar sunar, \u00f6zellikle i\u00e7erik yo\u011fun ve dinamik veriye dayal\u0131 uygulamalar i\u00e7in idealdir.<\/p>\n<\/li>\n<li>\n            <strong>OpenAI API'sini kullan\u0131rken veri gizlili\u011fi ve g\u00fcvenli\u011fi nas\u0131l sa\u011flan\u0131r?<\/strong><\/p>\n<p>OpenAI API'sine g\u00f6nderilen verilerin gizlili\u011fi ve g\u00fcvenli\u011fi, uygulaman\u0131n mimarisinde kritik bir rol oynar. Hassas CV verilerini do\u011frudan istemciden OpenAI'a g\u00f6ndermek yerine, bu i\u015flemi Next.js API Routes veya Inngest gibi sunucu taraf\u0131 ortamlarda yapmal\u0131s\u0131n\u0131z. Ayr\u0131ca, OpenAI'\u0131n veri kullan\u0131m politikalar\u0131n\u0131 dikkatle incelemeli ve gerekirse CV'lerdeki ki\u015fisel kimlik bilgilerini anonimle\u015ftirme veya \u015fifreleme gibi ek \u00f6nlemler almay\u0131 d\u00fc\u015f\u00fcnmelisiniz.<\/p>\n<\/li>\n<li>\n            <strong>Inngest, sunucusuz mimaride ne t\u00fcr avantajlar sunar?<\/strong><\/p>\n<p>Inngest, uzun s\u00fcreli veya yo\u011fun kaynak gerektiren arka plan g\u00f6revlerini (CV analizi gibi) asenkron olarak i\u015flemenizi sa\u011flar. Bu, uygulaman\u0131z\u0131n ana API'sinin h\u0131zl\u0131 kalmas\u0131n\u0131, kullan\u0131c\u0131 deneyiminin kesintiye u\u011framamas\u0131n\u0131 ve sistemin y\u00fcksek y\u00fcke kar\u015f\u0131 \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 sa\u011flar. Otomatik yeniden denemeler ve g\u00f6rsel i\u015f ak\u0131\u015f\u0131 izleme gibi \u00f6zelliklerle hata y\u00f6netimini ve g\u00fcvenilirli\u011fi art\u0131r\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Shadcn\/ui, di\u011fer UI k\u00fct\u00fcphanelerinden (\u00f6rn. Material UI, Ant Design) ne gibi farkl\u0131l\u0131klar sunar?<\/strong><\/p>\n<p>Shadcn\/ui, bir bile\u015fen k\u00fct\u00fcphanesi olmaktan ziyade, Tailwind CSS \u00fczerine kurulu, eri\u015filebilir bile\u015fenler i\u00e7in bir koleksiyondur. Temel fark\u0131, bile\u015fenleri bir paket olarak kurmak yerine, ihtiyac\u0131n\u0131z olan bile\u015fenlerin kodunu do\u011frudan projenize kopyalaman\u0131z\u0131 sa\u011flamas\u0131d\u0131r. Bu yakla\u015f\u0131m, size tam \u00f6zelle\u015ftirme kontrol\u00fc verir ve projenize sadece kulland\u0131\u011f\u0131n\u0131z kodun eklenmesini sa\u011flar, bu da daha k\u00fc\u00e7\u00fck paket boyutlar\u0131 anlam\u0131na gelir.<\/p>\n<\/li>\n<li>\n            <strong>Resume Scan AI uygulamas\u0131 k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli i\u015fletmeler i\u00e7in uygun mu?<\/strong><\/p>\n<p>Kesinlikle evet. Uygulaman\u0131n mod\u00fcler yap\u0131s\u0131 ve maliyet etkin sunucusuz teknolojiler (OpenAI, Inngest) kullanmas\u0131 sayesinde, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli i\u015fletmeler (KOB\u0130'ler) de geli\u015fmi\u015f AI yeteneklerinden faydalanabilir. Bu teknolojiler, kulland\u0131k\u00e7a \u00f6de modeliyle \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in ba\u015flang\u0131\u00e7 maliyetleri d\u00fc\u015f\u00fck tutulabilir ve i\u015fletmelerin ihtiya\u00e7lar\u0131na g\u00f6re kolayca \u00f6l\u00e7eklendirilebilir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1342],"tags":[],"class_list":{"0":"post-31152","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ai","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?<\/title>\n<meta name=\"description\" content=\"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen &quot;Resume Scan AI&quot; uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?\" \/>\n<meta property=\"og:description\" content=\"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen &quot;Resume Scan AI&quot; uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-06T09:04:05+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?\",\"datePublished\":\"2025-10-06T09:04:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\"},\"wordCount\":3186,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AI\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\",\"name\":\"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-06T09:04:05+00:00\",\"description\":\"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen \\\"Resume Scan AI\\\" uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?","description":"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen \"Resume Scan AI\" uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?","og_description":"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen \"Resume Scan AI\" uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-06T09:04:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?","datePublished":"2025-10-06T09:04:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/"},"wordCount":3186,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AI"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/","url":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/","name":"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-06T09:04:05+00:00","description":"\u0130\u015fe al\u0131m s\u00fcre\u00e7lerinde CV tarama, \u015firketler i\u00e7in hem zaman al\u0131c\u0131 hem de b\u00fcy\u00fck bir maliyet unsuru olabilir. Aday havuzunun b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, insan kaynaklar\u0131 uzmanlar\u0131n\u0131n do\u011fru yetenekleri belirlemesi zorla\u015f\u0131r. Peki, yapay zekan\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirebilir ve daha verimli hale getirebiliriz? Bu makalede, Next.js 15, Tailwind CSS, BetterAuth, OpenAI, Inngest ve Shadcn\/ui gibi modern teknolojileri bir araya getirerek geli\u015ftirilen \"Resume Scan AI\" uygulamas\u0131n\u0131 t\u00fcm detaylar\u0131yla inceleyece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/resume-scan-ai-uygulamasi-next-js-15-openai-ve-daha-fazlasi-ile-nasil-gelistirilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Resume Scan AI Uygulamas\u0131: Next.js 15, OpenAI ve Daha Fazlas\u0131 ile Nas\u0131l Geli\u015ftirilir?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31152"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31152\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}