<Devsly/>
NotebookLM Watermark Remover
Remove the NotebookLM watermark from PDF slide exports — free, unlimited, and 100% in your browser.
View
NotebookLM Video Watermark Remover
Remove the NotebookLM watermark from every frame of your MP4 and auto-trim the end card — free and unlimited.
View
Gemini Watermark Remover
Remove the Gemini (Veo) sparkle watermark from every frame of your AI-generated MP4 — free and unlimited.
View
MCP https://devsly.io/mcp MCP Tools Best Skills API Docs

Keyboard Shortcuts

Navigation

Quick Search
⌘ / Ctrl + K
Toggle Dark Mode
⌘ / Ctrl + D
Close Dialogs
Esc

Tool Actions

Execute / Process
⌘ / Ctrl + Enter
Clear Input
⌘ / Ctrl + Shift + C
Copy Output
⌘ / Ctrl + Shift + X

Editor

Select All
⌘ / Ctrl + A
Undo
⌘ / Ctrl + Z
Redo
⌘ / Ctrl + Shift + Z
Questions or ideas? Reach us on LinkedIn — we reply. Connect

kemalcalak.com — llms.txt & GEO score

Re-scan this site
76 /100 B · 76 of 100 points

An index of pages, not of content

kemalcalak.com publishes a curated llms.txt — 22 links across 5 sections, 6.6 KB in all.

Every link carries a description, averaging 120 characters — long enough to tell a model which page answers a question without opening all of them first.

The clearest gap is points at clean markdown copies. Right now: 0 of 22 end in .md or .txt (0%, detected by file extension). Closing it is worth 10 points.

Good file with real gaps — the fixes below are mostly small. Scanned 13 October 2026 against 34 checks — 26 passed, 2 partial, 6 missing.

kemalcalak.com GEO score card: 76 out of 100, with the score broken down across content, structure, discovery, search-engine basics and depth.
kemalcalak.com scored 76/100 on 13 October 2026. Source file: https://kemalcalak.com/llms.txt.
76/100geo score
22links
5sections
6.6 KBsize

What it does well

  • Every link carries a description 22 of 22 described (100%)
  • Descriptions say something concrete Average 120 characters across 22 described links
  • Descriptions add to the title No description merely repeats its title
  • A workable number of links 22 links (12–50 is the sweet spot)

What is missing

  • Points at clean markdown copies +10 0 of 22 end in .md or .txt (0%, detected by file extension)
  • Link titles are descriptive +4 6 weak titles (bare URLs, “here”, one-word labels)
  • Publishes llms-full.txt +3 No llms-full.txt alongside the index
  • List items are markdown links +2 9 of 31 list items are plain text, not links

Among the 23 sites measured here so far, kemalcalak.com ranks 8th, against a median of 71. That comparison moves as new sites are scanned — it is a snapshot of this list, not of the web.

What kemalcalak.com tells an assistant

Ali Kemal Çalak

Agentic AI engineer building agents, LLM systems and fullstack products. A portfolio shot on code — scroll-driven, cinematic, alive.

Content & links

Can a model pick the right page, first time?

36/52

8 of 11 checks pass. What is left: points at clean markdown copies, link titles are descriptive and list items are markdown links.

  • Every link carries a description 22 of 22 described (100%)
    10/10
  • Descriptions say something concrete Average 120 characters across 22 described links
    7/7
  • Descriptions add to the title No description merely repeats its title
    4/4
  • Points at clean markdown copies 0 of 22 end in .md or .txt (0%, detected by file extension)
    0/10
  • Link titles are descriptive 6 weak titles (bare URLs, “here”, one-word labels)
    0/4
  • A workable number of links 22 links (12–50 is the sweet spot)
    4/4
  • Skippable links marked Optional An ## Optional section is present
    3/3
  • No duplicate links All 22 URLs are distinct
    2/2
  • List items are markdown links 9 of 31 list items are plain text, not links
    2/4
  • Enough written detail per link 37 words per link across 805 words
    3/3
  • Links are absolute URLs All 22 links are absolute URLs
    1/1

Structure

Does it follow the llms.txt shape?

19/20

6 of 7 checks pass. What is left: section names say what is inside.

  • Exactly one H1 project title “Ali Kemal Çalak”
    3/3
  • Summary directly under the title Present as a blockquote
    3/3
  • Summary is a usable length 132 characters
    3/3
  • Concrete language, not marketing filler No marketing filler detected
    3/3
  • Grouped into balanced sections 5 H2 sections, largest group holds 9 of 22 links
    4/4
  • Conforms to the published grammar Markdown only, headings used as the spec defines them
    2/2
  • Section names say what is inside 1 of 5 headings are generic
    1/2

Discovery & access

Can an assistant reach it, and is it allowed to?

11/11

All 5 checks pass in this group.

  • At the root of the domain you typed Found at the standard /llms.txt path
    2/2
  • Sent as plain text Content-Type: text/plain; charset=utf-8
    1/1
  • robots.txt exists 68 B of crawler rules
    1/1
  • AI crawlers are not blocked No AI user-agent is disallowed at the root
    6/6
  • robots.txt points at a sitemap A Sitemap: line is declared
    1/1

Search-engine basics

What a crawler reads from your homepage today

8/8

All 6 checks pass in this group.

  • Homepage title is the right length 37 characters, from title
    2/2
  • Title is not padded or repetitive No repeated terms
    1/1
  • Homepage has a meta description 132 characters, from meta description
    2/2
  • Canonical URL declared https://kemalcalak.com
    1/1
  • Language declared lang="en"
    1/1
  • Social card image og:image is set
    1/1

Depth & upkeep

Is there more than the index, and is it current?

2/9

1 of 5 checks pass. What is left: publishes llms-full.txt, the index points at the full file, server reports when it last changed and the index is kept current.

  • Publishes llms-full.txt No llms-full.txt alongside the index
    0/3
  • The index points at the full file No llms-full.txt exists to link to
    0/1
  • Index is a sensible size 6.6 KB
    2/2
  • Server reports when it last changed No Last-Modified header — clients cannot tell when this changed
    0/1
  • The index is kept current Cannot be confirmed — the server sends no Last-Modified header
    0/2

What kemalcalak.com should fix next

Ordered by what each one is worth. Open a row for the steps.

+24 pts
  • Right now: 0 of 22 end in .md or .txt (0%, detected by file extension)

    Publish a .md version of each page and link to that. The single biggest win here: the model reads your content instead of your navigation and footer.

    Where: Your CMS or docs build — this is the biggest single win here

    1. Publish a .md version of each page you link to, at a predictable URL (page.md next to page).
    2. Point the llms.txt links at the .md copies, not at the HTML pages.
    3. Strip navigation, cookie banners and footers from the markdown — that is the whole point: the model reads your content instead of your chrome.
    4. Declare the pair in your HTML with a link relation so clients can find it without guessing.

    In your file

    line 20
    - [About](https://kemalcalak.com/about): Ali Kemal Çalak — agentic AI engineer. The bio, capabilities, education and stack behind the agents, LLM systems and fullstack products he ships.
    - [About](https://kemalcalak.com/about.md): Ali Kemal Çalak — agentic AI engineer. The bio, capabilities, education and stack behind the agents, LLM systems and fullstack products he ships.
    line 21
    - [Projects](https://kemalcalak.com/projects): Selected work: agentic AI systems, LLM pipelines and fullstack products — DialogTR, SponsorHub, SaaS Starter and more, each broken down shot by shot.
    - [Projects](https://kemalcalak.com/projects.md): Selected work: agentic AI systems, LLM pipelines and fullstack products — DialogTR, SponsorHub, SaaS Starter and more, each broken down shot by shot.
    line 22
    - [Work](https://kemalcalak.com/work): Experience and roles of Ali Kemal Çalak — the production list behind the agentic AI and fullstack work, year by year.
    - [Work](https://kemalcalak.com/work.md): Experience and roles of Ali Kemal Çalak — the production list behind the agentic AI and fullstack work, year by year.

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: 6 weak titles (bare URLs, “here”, one-word labels)

    Replace bare URLs and “click here” with the page’s real name — the title is half the signal.

    Where: The "[Title]" part of each link

    1. Replace bare URLs, "here", "click here" and one-word labels with the page’s real name.
    2. The title is half the signal — a model reads it before it reads your description.

    In your file

    line 19
    - [Home](https://kemalcalak.com): Agentic AI engineer building agents, LLM systems and fullstack products. A portfolio shot on code — scroll-driven, cinematic, alive.
    - [{the page’s real name}](https://kemalcalak.com): Agentic AI engineer building agents, LLM systems and fullstack products. A portfolio shot on code — scroll-driven, cinematic, alive.
    line 20
    - [About](https://kemalcalak.com/about): Ali Kemal Çalak — agentic AI engineer. The bio, capabilities, education and stack behind the agents, LLM systems and fullstack products he ships.
    - [{the page’s real name}](https://kemalcalak.com/about): Ali Kemal Çalak — agentic AI engineer. The bio, capabilities, education and stack behind the agents, LLM systems and fullstack products he ships.
    line 22
    - [Work](https://kemalcalak.com/work): Experience and roles of Ali Kemal Çalak — the production list behind the agentic AI and fullstack work, year by year.
    - [{the page’s real name}](https://kemalcalak.com/work): Experience and roles of Ali Kemal Çalak — the production list behind the agentic AI and fullstack work, year by year.

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: No llms-full.txt alongside the index

    Generate an llms-full.txt that inlines every linked page. Community convention rather than spec, but assistants with a large context window take the whole thing in one request.

    Where: Your docs build, output at /llms-full.txt

    1. Concatenate the markdown of every page listed in llms.txt into one file.
    2. Keep the heading structure: a client uses those headings to navigate a multi-megabyte file.
    3. Regenerate it in the same build step that publishes the docs, so it cannot drift.
    4. Note that llms-full.txt is a community convention, not part of the proposal — useful, but optional.
  • Right now: 9 of 31 list items are plain text, not links

    A file list needs `- [Title](url): description`. A plain line gives a model something to read but nowhere to go — it cannot follow it, quote it, or check it.

    Where: Every "- " line in llms.txt

    1. Turn each plain line into a markdown link: "- [Title](https://your-site/page.md): description".
    2. A line without a URL gives a model something to read but nowhere to go — it cannot follow, quote or verify it.
    3. If a fact has no page behind it (an address, a phone number), put it in the free-text body above the sections, not in a file list.
    4. Note that "#" is a heading in markdown, not a comment — lines starting with # become H1/H2 headings.

    In your file

    line 39
    - Fullstack AI Engineer at SeriAI (07.2026 — Present · Remote): Fullstack on an enterprise AI platform — one workspace where a company runs assistants over swappable models on its own infrastructure instead of renting a single provider. Mostly the Next.js side of the product, plus the AI layer on top of the Vercel AI SDK: the skills and tool calls the assistants run.
    - [Fullstack AI Engineer at SeriAI (07.2026 — Present · Remote)]({https://your-site/path}.md): {what this page covers}
    line 40
    - Intern Software Engineer at Colobrix (09.2025 — 07.2026 · Remote): Built a multi-tenant PRM platform that connects vendors and partners — partnership management, customer and opportunity tracking, deal registration, project management, messaging and role-based access control — plus an AI-powered company-research workflow that enriches company profiles.
    - [Intern Software Engineer at Colobrix (09.2025 — 07.2026 · Remote): Built a multi-tenant PRM platform that connects vendors and partners — partnership management, customer and opportunity tracking, deal registration, project management, messaging and role-based access control — plus an AI-powered company-research workflow that enriches company profiles.]({https://your-site/path}.md): {what this page covers}
    line 41
    - Intern AI Engineer at Kafein Technology (07.2025 — 09.2025 · Istanbul, Hybrid): Developed AI-driven automation workflows on n8n, and built an n8n-style workflow platform with a FastAPI backend where users register, create their own workflows and share them.
    - [Intern AI Engineer at Kafein Technology (07.2025 — 09.2025 · Istanbul, Hybrid): Developed AI-driven automation workflows on n8n, and built an n8n-style workflow platform with a FastAPI backend where users register, create their own workflows and share them.]({https://your-site/path}.md): {what this page covers}

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: Cannot be confirmed — the server sends no Last-Modified header

    Regenerate llms.txt when the docs change. A year-old index quietly points models at pages that have moved.

    Where: Your build pipeline

    1. Regenerate llms.txt in the same step that publishes content, so it cannot go stale silently.
    2. Treat it as a build artifact, not a hand-edited file — hand-edited indexes drift within a quarter.
    3. An llms.txt with discontinued products is worse than none: a model will repeat the wrong facts confidently.
  • Right now: 1 of 5 headings are generic

    Name sections after what a reader is looking for — “API reference” beats “Links”.

    Where: The "## " headings in llms.txt

    1. Replace generic names — "Links", "Other", "Misc", "Pages" — with what is actually inside.
    2. Name the section after the question it answers: "API reference" beats "Links".

    In your file

    line 17
    ## Pages
    ## {what is in this section}

    Placeholders in { } are yours to write — we do not invent text about your pages.

  • Right now: No Last-Modified header — clients cannot tell when this changed

    Let the server send Last-Modified on llms.txt. Without it a client has to re-download the whole file to notice a change.

    Where: Your web server configuration

    1. Serve llms.txt as a real file on disk so the server can derive Last-Modified from its mtime.
    2. If it is generated by an application route, set the header yourself from the generation time.
    3. Without it a client has to re-download the whole file to notice a change, and cannot answer "is this current?".
    Instead of
    HTTP/1.1 200 OK\nContent-Type: text/plain
    Do this
    HTTP/1.1 200 OK\nContent-Type: text/plain\nLast-Modified: Wed, 10 Sep 2026 08:14:00 GMT
  • Right now: No llms-full.txt exists to link to

    Mention llms-full.txt inside llms.txt. Guessing the filename works often enough to be tempting and not often enough to rely on.

    Where: Inside llms.txt

    1. Mention the full file in llms.txt itself, as a link or a line of context.
    2. Guessing the filename works often enough to be tempting and not often enough to rely on.
    Do this
    Full inlined text: https://acme.example/llms-full.txt

This score is Devsly’s own heuristic, not an official standard — llms.txt has no scoring body. It measures how well a file serves an AI assistant, and it does not predict whether any assistant will cite the site. The reading is a snapshot from 13 October 2026; run it again for the current state, or check a different site.