Skip to content

Sabbir Mohammad Sami web developer

ResumeDownload Resume

All notes

(AI)6 min read

Claude Code Skills: Write Your First SKILL.md, Step by Step

A Claude Code skill is a folder with a SKILL.md file: YAML frontmatter that tells Claude when to use it, then plain Markdown instructions. Claude loads a skill when your request matches its description, or you run it yourself with /skill-name. This guide builds one from scratch, adds a script, and shows how to test and share it.

Cover: “SKILL.MD” in heavy capitals over three skill cards — release-notes, code-review and deployCover: “SKILL.MD” in heavy capitals over three skill cards — release-notes, code-review and deploy

( Before you start )

What a skill is, and why it beats a long prompt

A skill is a reusable set of instructions that Claude Code loads only when it needs them. Instead of pasting the same “here is how we write release notes” prompt into every session, you write it once in a SKILL.md file. Claude sees a short description of every skill up front and opens the full file only when a task matches — so a long list of skills costs almost nothing until one is used.

  • Repeatable work — release notes, review checklists, migration steps, commit messages.
  • Team knowledge — commit a skill to the repository and everyone’s Claude follows the same process.
  • Exact steps — a skill can ship scripts that Claude runs, so the fiddly logic stays deterministic.

Where skills live

A skill is a folder named after the skill, with a SKILL.md inside. Where you put the folder decides who gets it:

ScopePathUse it for
Personal~/.claude/skills/<name>/SKILL.mdYour own habits, in every project
Project.claude/skills/<name>/SKILL.mdTeam workflows, committed with the code
Plugin<plugin>/skills/<name>/SKILL.mdSharing across projects; runs as /plugin-name:skill-name

If a personal and a project skill share a name, the personal one wins. Plugin skills carry the plugin’s name as a prefix, so they never clash with yours.

( Build one, step by step )

Create the folder

Bash
mkdir -p .claude/skills/release-notes
touch .claude/skills/release-notes/SKILL.md

Use lowercase letters and hyphens for the folder name: it is what you type after the slash.

Write the frontmatter

The file opens with YAML between two --- lines, starting on the very first line. Every field is optional, but description is the one that matters: it is what Claude reads to decide whether the skill fits the task in front of it.

Markdown
---
name: release-notes
description: Drafts release notes from the commits since the last tag. Use when the user asks for release notes, a changelog entry or "what shipped".
---
  • name — defaults to the folder name when you leave it out.
  • description — say what the skill does and when to use it, in the words a person would actually type. A vague description is the most common reason a skill never runs.
  • allowed-tools — a space-separated list, such as allowed-tools: Read Grep Bash, that limits the tools Claude may use while the skill runs.
  • disable-model-invocation: true — only you can start the skill, with its slash command; Claude will not load it on its own. Use it for anything with side effects, like a deploy.

Write the instructions

Below the frontmatter is ordinary Markdown. Write it the way you would brief a new teammate: the goal, the steps in order, and what “done” looks like. Here is the whole file:

Markdown
---
name: release-notes
description: Drafts release notes from the commits since the last tag. Use when the user asks for release notes, a changelog entry or "what shipped".
---

# Release notes

## Steps
1. Find the last tag: `git describe --tags --abbrev=0`
2. List the commits since it: `git log <tag>..HEAD --oneline`
3. Group them by Conventional Commit type: feat, fix, perf, then the rest.
4. Rewrite each line for users, not developers. Drop chore and ci commits.

## Output
- A `## vX.Y.Z` heading, then Features, Fixes and Performance sections.
- One line per change, present tense, no commit hashes.

Keep SKILL.md under about 500 lines. Long reference material belongs in separate files next to it (step 5) — Claude reads those only when the instructions point to them.

Run it and check it loaded

Start a new Claude Code session in the project. Either ask in plain words and let Claude pick the skill from its description, or run it yourself:

Text
write release notes for this version

/release-notes
  • Type / in the prompt — your skill should be in the menu.
  • Run /skills to list every skill Claude Code has loaded.
  • The slash command only runs at the start of a message; typing the name mid-sentence does not trigger it.

Add scripts and reference files

A skill folder can hold more than one file. Scripts are run, not read into the conversation, which makes them the right home for anything that must be exact — parsing, validating, generating.

Text
.claude/skills/release-notes/
├── SKILL.md
├── reference.md          # tone and wording, read only when needed
└── scripts/
    └── contributors.sh   # prints the unique commit authors

Point to them from SKILL.md. ${CLAUDE_SKILL_DIR} stands for the skill’s own folder, so the path works wherever the skill is installed:

Markdown
## Contributors
Run `bash ${CLAUDE_SKILL_DIR}/scripts/contributors.sh` and thank everyone it prints.
For tone and wording, follow [reference.md](reference.md).

( Going further )

Descriptions that actually trigger

WeakStrong
Helps with releases.Drafts release notes from commits since the last tag. Use when the user asks for release notes or a changelog.
Code review.Reviews a diff for bugs, missing tests and unclear names. Use before a commit or when the user asks for a review.
Database stuff.Writes and checks Prisma migrations. Use when the schema changes or a migration fails.

The pattern is always the same: what it does, then “Use when…” with the phrases people really say. Rules that should apply to every task do not belong in a skill at all — put them in CLAUDE.md.

Skills FAQ

What is the difference between a skill and CLAUDE.md?
CLAUDE.md is loaded into every session, so it suits rules that always apply. A skill is loaded only when a task needs it, so it suits longer, task-specific procedures.
Can I stop Claude from running a skill on its own?
Yes. Add disable-model-invocation: true to the frontmatter and the skill only runs when you type its slash command.
How do I share a skill with my team?
Commit it under .claude/skills/ in the repository, or package it in a plugin so other projects can install it.
Why does my skill never load?
Almost always the description. Make it say when to use the skill, in the words a person would type, then check that it appears in /skills.

Reference: Claude Code docs — Skills.

Topic
AI
Published
Reading
6 min · 998 words
Sections
9
Tags
  • Claude Code
  • Agent Skills
  • SKILL.md
  • AI agents
  • Automation

Experience

( 03 roles — 2+ years )

Full-stack developer in Dhaka, Bangladesh. Building for clients in Germany and Bangladesh since 2022.

  1. (01)

    August 2025 — Present

    Full-Stack Developer

    Susko GmbH · Full Time · Remote

    • Developed and enhanced an AI-powered SaaS and social media automation platform — AI content, image and video generation, automated scheduling and publishing, multi-account and content-team management, Meta, Instagram and Google integrations, WhatsApp-based content generation and scheduling, admin controls and subscription management.
    • Built a full-stack Padel court management and automation system that connects physical court hardware to a real-time web dashboard — court and player management, game control and live scores over WebSocket — and worked on the sensor electronics, PCB design, footprint verification, Gerber validation and JLCPCB manufacturing.
    • Built and maintained automation workflows with n8n, webhooks, APIs and external service integrations that take manual steps out of business processes.
    • Delivered 40+ production websites and full-stack applications for German clients across industries in React, Next.js and TypeScript — shop management, review management and automation, fundraising platforms, menu management, QR code generation and other custom business tools.
    • Optimized backend performance across production applications — database queries, API paths, data processing and Redis-based workflows — for faster, more responsive apps.

    Next.js · React · TypeScript · Node.js · Python · Prisma · Redis · WebSocket · n8n · OpenAI

  2. (02)

    March 2024 — May 2025

    Software Developer

    Bangladesh Associate of IT Solutions · Full Time · On-site

    • Developed a full-stack inventory management system tracking products, sales, payments, returns, waste products, customer ledgers and SMS notifications, in React, TypeScript, Express and MySQL.
    • Scaled an accounting management platform from a single-client application into a multi-user system, with financial dashboards, journal entries, transaction management, reporting and data visualization.
    • Deployed and maintained web applications on cPanel and VPS servers — production deployments, domain configuration, server setup and troubleshooting.
    • Delivered websites for schools, madrasas and other organizations, turning client requirements into responsive, production-ready web applications.
    • Developed and redesigned production and company portfolio websites in React, Next.js and TypeScript, with a focus on responsive design and user experience.

    React · Next.js · TypeScript · Express · MySQL · Tailwind CSS · cPanel · VPS

  3. (03)

    November 2023 — April 2024

    Full-Stack Developer

    Diginie IT · Internship · Remote

    • Completed a remote internship as a full-stack developer, building and maintaining client web applications in Next.js, TypeScript and Tailwind CSS.
    • Turned designs into responsive pages that held together on every screen size, and kept existing client sites running.

    Next.js · TypeScript · Tailwind CSS · GitHub

About

( Dhaka, Bangladesh )

Sabbir Mohammad Sami — full-stack web & app developer at Susko GmbH, building for the web since 2022.

Sabbir Mohammad Sami, smiling and looking off to the side, seated on a white block in a black sweater — black-and-white studio portrait

I’m a full-stack developer from Dhaka who cares about the part people actually touch — unusual layouts, careful CSS, motion that means something — and about the code underneath being just as clean.

( Story )

I grew up in Dhaka and studied arts and humanities at Kabi Nazrul Government College. Alongside my studies I joined a web development course, and that is where the real growth started — surprise. Alongside work, I am now in my third year of Honours in Economics at National University.

My first website was a tourism site about the place I most wanted to visit. I built it in class 10.

Today I build AI products, automation and client platforms at Susko GmbH, after two years of shipping inventory, accounting and client sites at BAITS. What I am after has not changed: interfaces that look good and back-ends that run smoothly, from the same pair of hands.

Honest, down to earth, and fond of hard work. My inbox is always open — for a project, or just to say hi.

  1. ( Education )

    1. Kabi Nazrul Government College

      • Arts and humanities
      • Dhaka, Bangladesh
    2. National University, Bangladesh

      Session 2023–2024 · Now

      • Honours in Economics — 3rd year
      • Department of Economics
  2. ( Co-curricular )

    —

    Bangladesh National Cadet Corps (BNCC)

    • 1 No Battalion, Ramna Regiment
    • Rank: Cadet Corporal
  3. ( Languages )

    Bangla, English, Hindi

    • Bangla — native
    • English — comfortable
    • Hindi — fluent

( Skills )

Expertise
React · Next.js · JavaScript · TypeScript · MongoDB · Bootstrap · Tailwind CSS · shadcn/ui · GitHub · Figma
Comfortable
Flutter · Dart · MySQL · Mongoose · Express · TanStack Query · Firebase · React Router · Photoshop
Familiar
Zod · Framer Motion · GSAP · JWT · Axios · CORS · Stripe · Vercel

( Questions )

Who is Sabbir Mohammad Sami?

Sabbir Mohammad Sami (S M Sami) is a full-stack web and app developer from Dhaka, Bangladesh. Since August 2025 Sami has worked as a Full-Stack Developer at Susko GmbH in Germany, after building inventory and accounting platforms at Bangladesh Associate of IT Solutions (BAITS). Sami has been building for the web since 2022.

What does Sabbir Mohammad Sami build?

Sami builds websites, web apps, mobile apps and AI products end to end: company and restaurant websites, booking and management platforms, an AI social media platform (Kocial), an AI review manager (ReviewSync) and a Flutter money app (Sompi). That includes 40+ production websites for clients in Germany and Bangladesh.

Which technologies does Sami work with?

Sami works across the MERN stack — MongoDB, Express, React and Node.js — and with Next.js, TypeScript, Tailwind CSS, MySQL, PostgreSQL, Prisma and Redis. Mobile apps are built in Flutter and Dart. AI features use the OpenAI API, n8n automations and webhooks, and motion uses GSAP.

Does Sami build mobile apps with Flutter?

Yes. Sami builds cross-platform apps in Flutter and Dart. Sompi, Sami’s own money tracker, runs on Android, iOS, the web and the desktop from one Flutter codebase, with Riverpod for state and an encrypted SQLite store, so every account and transaction stays on the device.

Does Sami build AI products?

Yes. At Susko GmbH Sami builds AI SaaS: Kocial writes captions, generates images and publishes to Facebook and Instagram for agencies, and ReviewSync answers Google reviews in a business’s own voice. Sami also builds n8n workflows that connect AI models to business tools.

How can I hire Sami as a web or app developer in Dhaka?

Email smsami.dev@gmail.com or use the contact form on this site with a short note about the project. Sami works with clients in Dhaka, across Bangladesh and abroad — remotely for companies in Germany — and replies in English or Bangla.

( Contact )

Contact

( Available for projects )

Based in Dhaka, Bangladesh (GMT+6). Happy to talk in English, Bangla or Hindi.

Let’s work together.

Have an exciting project you need help with? Send me an email, give me a call, or write below — a project, a question, or just to say hi.

( Write to me )

* Required