FlutterBro | Samandar Takhirov
23 subscribers
55 photos
19 videos
4 files
34 links
Software developer at udevs.io
- Mobile Application
- Personal portfolio
Creator: @takhirovs
Download Telegram
Forwarded from Fazliddin │ Blog
#claudecode CLI'ni setup qilish


3. Skills

Skills nima?
Skills - bu .claude/skills/ directory'dagi packaged workflow'lar. Har bir skill o'z papkasida SKILL.md file'i bilan yashaydi va aniq bir vazifani bajarish uchun yo'riqnoma sifatida ishlaydi.

Rules'dan asosiy farq, rules - Claude eslab turishi kerak bo'lgan qoidalar. Skills - Claude bajarishi kerak bo'lgan ishlar.

Misol uchun:
Backend qaytargan JSON'ga data class yozish uchun, har bir model bir xil pattern bo'lishi kerak:
@immutable final class
defensive fromJson
ValueGetter-based copyWith
manual ==, hashCode, toString


Har safar backend'dan yangi response kelganida bu boilerplate'ni Claude'ga yozib tushintirish kerak bo'ladi va biror detailni unutib qolish ehtimoli bor. Skill bilan bir marta yoziladi, keyin "create a model for this JSON" desangiz bo'ldi.

Skill uchun misol:

---
name: dart-model-from-json
description: Generate an immutable Dart data class from a JSON sample. Use when the user provides JSON and asks for a model, or says "create a model for this response".
allowed-tools: Read, Write, Edit
---

# dart-model-from-json

## Conventions
Every generated model must follow this structure:

1. `@immutable final class ModelName` — no inheritance.
2. `const` constructor with `required` named params for every field.
3. `factory fromJson(Map<String, Object?> json)` with defensive parsing:
- Strings: `json['key']?.toString() ?? ''`
- Ints: `int.tryParse(json['key']?.toString() ?? '') ?? 0`
- DateTime: `DateTime.tryParse(...)?.toLocal()`
- Nested maps: use `switch` expression to type-check.
4. `copyWith` uses `ValueGetter<T>?` so callers can pass null explicitly.
5. Manual `==`, `hashCode`, `toString`. Do not use freezed.

## Do not
- Do not use freezed, json_serializable, or build_runner.
- Do not throw from fromJson — return defaults.
- Do not skip `?.toLocal()` on DateTime fields.


YAML frontmatter'da ikkita muhim field bor:
1. description — Claude shu description'dan tushunadi qachon skill'ni ishga tushirishni. Aniq trigger phrase yozish kerak ("create a model for this JSON").
2. allowed-tools — security layer. Skill faqat shu list'dagi tool'larni ishlata oladi.

O'zim ishlatadigan skillar.

Part 3/7
Forwarded from Fazliddin │ Blog
#claudecode CLI'ni setup qilish


4. Agents

Agents nima?
Agents - bu .claude/agents/ directory'dagi markdown file'lar. Har bir agent o'z alohida context window'ida, o'z system prompt'i va o'z tool restriction'lari bilan ishlaydi. Asosiy session'ingiz ularga vazifa beradi, ular natijani qaytaradi. Agents - alohida session sifatida ishga tushiriladigan worker.

Nima uchun bu muhim?
Misol uchun, siz feature ustida ishlayapsiz va Claude'dan "barcha LoginBloc ishlatadigan joylarni topib ber" deb so'raysiz. Claude grep'lab qidirishni boshlaydi, ~10 ta file ochadi, hammasini context'ga yuklaydi, keyin sizga 2-3 qatorlik javob beradi.

Lekin shu ~10 ta file endi sizning session'ingizning context'ida qoladi. Keyingi vazifalar uchun ham yuklab turiladi va bunga token sarflaydi. Bu context pollution deyiladi.

Agents bu muammoni hal qiladi. Agent o'z alohida context'ida ishlaydi, vazifani bajaradi, va sizga faqat summary qaytaradi. ~10 ta file sizning context'ingizga umuman kirmaydi.


---
name: code-reviewer
description: Reviews a diff for convention compliance against `.claude/rules/`, generated-file leakage, and the project's hand-written state-equality pattern. Use proactively after any non-trivial change to lib/** or data/** before opening a PR. Read-only; cannot modify code.
tools: Read, Glob, Grep, Bash(git diff:*), Bash(git status:*), Bash(git log:*), Bash(fvm flutter analyze:*)
model: sonnet
---

You are a senior code reviewer for this repository.

Review checklist, in order:
1. Convention compliance. Read `.claude/rules/` files matching the changed paths. Check the diff against them. Quote the specific rule being violated.
2. Test coverage. Every changed public function needs at least one test path. Flag missing coverage.
3. Generated files. No manual edits to `*.g.dart`, `*.freezed.dart`, or `*.gen.dart`.
4. Security. No hardcoded secrets, no leftover `debugPrint`, no unrestricted `dynamic` returns.

Output format:
- "Verdict": pass | needs-changes | blocker
- Bullet list of findings, each with file:line and a one-line fix
- Do not suggest unrelated refactors. Stay within the diff.


YAML frontmatter'da uchta muhim field bor:
1. name - agent'ning idenfikatori
2. description - Claude qachon ushbu agent'ga delegate qilishni description orqali tushunadi. "Use proactively after..." kabi aniq trigger yozish kerak.
3. tools - agent qaysi tool'larni ishlata olishi. Bu yerda read-only restriction muhim - code-reviewer agent code'ni o'zgartira olmaydi, faqat o'qib analiz qila oladi.
4. model - agent'ni vazifasiga qarab Claude model tanlash kerak. Misol uchun code review qilish uchun Sonnet yetarli va u Opusdan arzonroq.

O'zim ishlatadigan sub-agentlar.

Part 4/7
Forwarded from Fazliddin │ Blog
#claudecode CLI'ni setup qilish


5. Hooks
Hooks nima?

Hooks - bu Claude Code'da ma'lum bir change bo'lganda avtomatik ishga tushadigan shell script'lar. Masalan: Claude file'ni yozganda, Bash command ishlatganda, yoki siz prompt yuborganda.

Nimaga kerak?
Misol uchun, CLAUDE.md'da "DO NOT MODIFY GENERATED FILES" deb rule yozgansiz. Claude ko'p hollarda bu qoidaga rioya qiladi, lekin har doim emas. Model probabilistic, ya'ni ~95% to'g'ri qaror qiladi, ~5% xato.

Hook esa deterministic. Agar Claude *.g.dart file'ni edit qilmoqchi bo'lsa, hook uni to'xtatadi. Hech qanday istisno yo'q.

Hook'ning anatomiyasi
Hook'lar .claude/settings.json file'ida configure qilinadi.

{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/block_generated_files.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "dart format \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true"
}
]
}
]
}
}


Uchta muhim element bor:
1. Event type - qachon ishga tushishi. PreToolUse — tool ishlatishdan oldin (bloklash uchun). PostToolUse — tool ishlatilgandan keyin (cleanup uchun).
2. matcher - qaysi tool'larda ishga tushishi. Write|Edit|MultiEdit — file yozish va o'zgartirish tool'lari.
3. command - shell script yoki inline command. Stdin'da JSON oladi, stdout'da JSON qaytaradi.

Real misol: Generated file'larni bloklash
Project'da dart run build_runner ishlatadigan generated file'lar bor. Claude ba'zan ularni "tuzatishga" harakat qiladi. Bu xato chunki file generator'dan qaytadan yaratilishi kerak.

1. PreToolUse

.claude/hooks/block_generated_files.sh:

#!/usr/bin/env bash
# Refuses Write/Edit/MultiEdit on files that are produced by code
# generators in this project. The glob mirrors `analyzer.exclude` in
# analysis_options.yaml — those are the files marked as write-only by
# their respective generator (build_runner, drift_dev, flutter_gen,
# pubspec_generator, vector_graphics_compiler).
#
# Triggers on the `Write|Edit|MultiEdit` matcher in PreToolUse.
set -euo pipefail

payload="$(cat)"
path="$(printf '%s' "$payload" | jq -r '.tool_input.file_path // empty')"

case "$path" in
*.g.dart\
|*.freezed.dart\
|*.gen.dart\
|*.gql.dart\
|*.config.dart\
|*.mocks.dart\
|*.pb.dart\
|*.pbenum.dart\
|*.pbjson.dart\
|*/lib/src/common/localization/generated/*\
|*/lib/src/common/model/generated/*\
|*/lib/src/common/constant/gen/*)
jq -nc '{
"permissionDecision": "deny",
"reason": "Generated file. Edit the source declaration (drift table, .arb file, pubspec.yaml, etc.) and run `make gen` instead."
}'
;;
*)
jq -nc '{"permissionDecision": "allow"}'
;;
esac


Endi Claude qancha harakat qilsa ham generated dart file'ni edit qila olmaydi😁

2. PostToolUse

Har file edit, yozilgandan keyin avtomatik format qiladi:

dart format "$CLAUDE_TOOL_FILE_PATH" 2>/dev/null || true


Claude file'ni edit qilib bo'lgandan keyin PostToolUse ishga tushadi va o'zi edit qilgan file'ni formatlaydi.

O'zim ishlatadigan hook'lar.

Part 5/7
Forwarded from Fazliddin │ Blog
#claudecode CLI'ni setup qilish


6. MCP

MCP nima?
MCP (Model Context Protocol) - bu Claude'ni tashqi tool va data source'larga ulaydigan standard protocol. MCP Claude'ga yangi imkoniyatlar beradi - database'ni o'qish, Sentry'dan error olish, codebase'ni symbol darajasida tushunish.

Nimaga kerak?
Oddiy holatda Claude faqat project'dagi file'larni ochib, text bo'yicha qidiradi.

Misol uchun, siz: "LoginController qayerlarda ishlatilgan?", deb so'rasangiz, Claude kerakli joylarni topish uchun ko'p file'larni qidirib chiqishi mumkin. Project katta bo'lsa, bu ko'proq vaqt va token sarflaydi.

Dart MCP server ulangan bo'lsa, Claude Dart analyzer'dan foydalana oladi. Ya'ni u code'ni oddiy text sifatida emas, class, function va reference'lar sifatida tushunadi.

Shunda Claude:
• LoginController qayerlarda ishlatilganini;
• qaysi function qayerdan chaqirilganini;
• code'dagi analyzer error'larni
aniqroq va tezroq topa oladi.

MCP server qo'shish
MCP server'lar claude mcp add command orqali qo'shiladi.

Har bir server uchun uchta scope bor:

- local - faqat shu projectda, faqat sizda
- project - .mcp.json orqali team bilan share qilinadi
- user - barcha projectlarda ishlaydi


Flutter project uchun official Dart MCP server'ni qo'shish:

claude mcp add --transport stdio dart -- dart mcp-server


Bu Claude'ga Dart analyzer, hot reload, va ishlab turgan app'dan runtime error'larni o'qish imkonini beradi.

Important
MCP server qo'shganingizda Claude yangi tool'larga ega bo'ladi. Tool'lar ko'paysa, Claude qaysi tool'ni ishlatishni tanlashi qiyinlashishi mumkin. Shuning uchun faqat real workflow'ingizda ishlatadigan MCP server'larni qoldirgan yaxshi.

O'zim ishlatadigan .mcp.json file.

Part 6/7
Forwarded from Fazliddin │ Blog
#claudecode CLI'ni setup qilish


7. Project Architecture (ARCHITECTURE.md)

ARCHITECTURE.md nima?
ARCHITECTURE.md - bu project'ning to'liq architectural xaritasi. Qaysi layerlar bor, ular qanday bog'lanadi, state/data flow - hammasi shu file'da yoziladi.

Part 1'da CLAUDE.md'ning Architecture section'i faqat key package'larni sanab o'tiladi. Sababi - CLAUDE.md har session'da context'ga yuklanadi, shuning uchun u qisqa bo'lishi kerak. To'liq architecture esa ARCHITECTURE.md'ga ketadi.

Nimaga kerak?
CLAUDE.md Claude'ga "qaysi package ishlatilgan" deb aytadi. ARCHITECTURE.md esa "nima uchun shunday qilingan va qanday ishlatish kerak" deb tushuntiradi.

ARCHITECTURE.md ichida nimalar bo'lgani yaxshi:
• High-level overview - qatlamlar diagrammasi
• Technical stack - har layer uchun qaysi package
• Project structure - lib/ va packages/ tree
• Dependency injection - Dependencies container
• Data flow - UI → Controller → Repository → Data source
• State management - control package, StateController
• Screen state pattern - part file orqali logic/UI ajratish
• Navigation - qanday handle qilinganligi
• Error handling - typed exception hierarchy


Claude'ga qanday ko'rsatish kerak
ARCHITECTURE.md'ni shunchaki yaratib qo'yish yetarli emas - Claude uni avtomatik o'qimaydi. CLAUDE.md'ning Guardrails section'iga shu qatorni qo'shish kerak:

• Before planning any change that adds or moves a file, read ARCHITECTURE.md to confirm the correct layer and the feature module convention.


Endi Claude yangi feature rejalashtirayotganda avval ARCHITECTURE.md'ni o'qiydi va file'ni to'g'ri qatlamga, to'g'ri konvensiya bilan joylashtiradi.

Part 7/7
👍2
Forwarded from Fazliddin │ Blog
Bir haftadan ko'proq vaqt davomida Claude Code'ni o'zim uchun qanday setup qilganim haqida bo'lishdim. Agar seriya kimgadur foydali bo'lgan bo'lsa, xursandman 🙌

Claude Code'ni setup qilishda asosan quyidagi maqoladan foydalandim:
I Spent 6 Months Tuning Claude Code - Here's the Exact Setup That Finally Worked

To'liq setup repo: github.com/ibragimov05/claudecode-setup
👍2🔥2👏1
🚀 Udevs Mobile Intern qidirmoqda!

Flutter va AI Engineering tools bilan real commercial loyihalarda ishlashni xohlaydigan yosh dasturchilarni qidiryapmiz.

Flutter bilimi bor, o'sishga tayyor, mas'uliyatli — bu siz uchun!

📩 CV / GitHub / portfolio yuborish uchun: @ yopildi
🔗 Batafsil: https://lnkd.in/p/dFBPXRvt

#Flutter #Internship #Udevs #MobileDevelopment
Forwarded from QuizlyMarket 💡
This media is not supported in your browser
VIEW IN TELEGRAM
📚 Imtihonga tayyorlanish endi oson!

QuizlyMarket — talabalar uchun testlar bozori.

✅ O'zingizga qulay rejimda yeching: Custom yoki University (haqiqiy imtihon formati)
🏆 Natijani darhol ko'ring va xatolar ustida qayta ishlang
🚀 Do'stingizni taklif qiling, ikkalangiz ham bonus oling 🔥

Telegram guruhlarda test qidirib vaqt yo'qotmang. Hammasi bitta ilovada.

📱 PlayMarket - QuizlyMarket
📱 AppStore - QuizlyMarket
📱 MacBook - QuizlyMarket
📱 WebSite - QuizlyMarket
🤖 Telegram Ilova - @quizlymarketbot

📱 @quizlymarket
📱 @quizlymarket
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Doniyor Ashiraliyev
Claude💬 obunasi va ovqatlanish uchun sarflaydigan pulim farqi😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1😁1
🤖 Lyra — Samandar's AI Assistant

Salom, FlutterBro! Men Lyra — Samandar Takhirovning shaxsiy AI yordamchisiman.

Qayerda topasiz?
📢 Kanal → @flutterbro1
🤖 Bot → @lyra_exec_bot

Savol bo'lsa — yozing 👇