Claude Code YOLO Mode — What It Is and When to Use It

You are working on a big refactor. Claude Code keeps asking: “Can I edit this file?” “Can I run this command?” “Can I delete this?” You say yes every time. There is a flag that skips all of that. It is called --dangerously-skip-permissions. Developers call it YOLO mode. This article explains what it does, when it is safe, and when it can destroy your project. What Is YOLO Mode? YOLO mode is Claude Code running with no permission prompts. It executes everything — file edits, shell commands, deletions — without asking. ...

March 27, 2026 · 3 min

Jetpack Compose Tutorial #25: Publishing Your App to Google Play

This is it — the final tutorial. You built a complete task manager app with Jetpack Compose, Room, Hilt, Navigation, MVI, animations, and adaptive layouts. Now let’s put it in the hands of real users. Before You Publish — Checklist Make sure your app is ready: App works — test every feature on a real device No crashes — check Logcat for errors Dark mode works — test both themes Different screen sizes — test on phone and tablet Keyboard handling — forms work with keyboard visible Proguard/R8 — release build compiles and runs App icon — custom icon (not the default green Android) App name — set in strings.xml Step 1: Generate a Signing Key Every app on Google Play must be signed. This proves the app comes from you. ...

March 26, 2026 · 6 min

CrewAI vs LangGraph vs AutoGen: Which Multi-Agent Framework Should You Use in 2026?

You want to build a multi-agent AI system. You have three main frameworks to choose from. Each has a completely different philosophy — and picking the wrong one will cost you weeks. In the multi-agent tutorial, we covered what multi-agent systems are. This article is the practical follow-up: which framework should you actually use? I will compare CrewAI, LangGraph, and AutoGen across 8 dimensions with real code, real numbers, and honest opinions. ...

March 26, 2026 · 8 min

Jetpack Compose Tutorial #24: Navigation, Animations, and Polish

The task manager works. You can add tasks, complete them, delete them, search, and filter. But it doesn’t feel polished. Screens change instantly. Deleting a task is jarring. There’s no feedback when you complete something. This tutorial adds the polish that makes the difference between a homework project and a real app. What We Add Feature What It Does Navigation transitions Screens slide in/out smoothly Swipe to delete Swipe a task left to delete it Animated task completion Checkbox animates, strikethrough fades in Animated list changes Tasks slide in/out when added or removed Empty state animations Gentle fade-in when list is empty Dark mode Follows system theme Snackbar with undo “Task deleted” with undo option Navigation Transitions By default, screens appear instantly. Add slide transitions: ...

March 26, 2026 · 5 min

Jetpack Compose Tutorial #23: Building the UI Layer — Screens and ViewModels

In the previous tutorial, we built the data layer — Room entities, DAO, repository, and use cases. Now we connect it to the UI. This tutorial builds the three main screens of our task manager app: the task list, the add task form, and the settings screen. What We Build UI Layer: ├── TaskListScreen + TaskListViewModel (MVI) │ ├── Search bar │ ├── Filter chips (All, Active, Completed) │ ├── Task cards with priority badge + category │ └── Swipe to delete ├── AddTaskScreen + AddTaskViewModel │ ├── Title + description fields │ ├── Category chips │ ├── Priority chips │ └── Save button with validation └── SettingsScreen + SettingsViewModel ├── Dark mode toggle └── Delete completed tasks Task List Screen — State and Intents State // ui/screens/tasklist/TaskListState.kt // Everything the task list screen needs to display data class TaskListState( val tasks: List<Task> = emptyList(), val filter: TaskFilter = TaskFilter.ALL, val searchQuery: String = "", val isLoading: Boolean = true, val error: String? = null, val taskCount: Int = 0, val completedCount: Int = 0 ) Intents // ui/screens/tasklist/TaskListIntent.kt // Every action the user can take on the task list sealed interface TaskListIntent { data class Search(val query: String) : TaskListIntent data class ChangeFilter(val filter: TaskFilter) : TaskListIntent data class ToggleTask(val taskId: Long) : TaskListIntent data class DeleteTask(val taskId: Long) : TaskListIntent data object DeleteCompleted : TaskListIntent data object Retry : TaskListIntent } ViewModel // ui/screens/tasklist/TaskListViewModel.kt @HiltViewModel class TaskListViewModel @Inject constructor( private val getTasks: GetTasksUseCase, private val toggleTask: ToggleTaskUseCase, private val deleteTask: DeleteTaskUseCase, private val repository: TaskRepository ) : ViewModel() { private val _state = MutableStateFlow(TaskListState()) val state: StateFlow<TaskListState> = _state.asStateFlow() private var searchJob: Job? = null init { observeTasks() observeCounts() } fun onIntent(intent: TaskListIntent) { when (intent) { is TaskListIntent.Search -> { _state.update { it.copy(searchQuery = intent.query) } observeTasks() } is TaskListIntent.ChangeFilter -> { _state.update { it.copy(filter = intent.filter) } observeTasks() } is TaskListIntent.ToggleTask -> { viewModelScope.launch { toggleTask(intent.taskId) } } is TaskListIntent.DeleteTask -> { viewModelScope.launch { deleteTask(intent.taskId) } } is TaskListIntent.DeleteCompleted -> { viewModelScope.launch { repository.deleteCompletedTasks() } } is TaskListIntent.Retry -> { _state.update { it.copy(error = null) } observeTasks() } } } private fun observeTasks() { searchJob?.cancel() searchJob = viewModelScope.launch { _state.update { it.copy(isLoading = true) } try { getTasks( filter = _state.value.filter, searchQuery = _state.value.searchQuery ).collect { tasks -> _state.update { it.copy(tasks = tasks, isLoading = false, error = null) } } } catch (e: Exception) { _state.update { it.copy(error = e.message, isLoading = false) } } } } private fun observeCounts() { viewModelScope.launch { repository.getTaskCount().collect { count -> _state.update { it.copy(taskCount = count) } } } viewModelScope.launch { repository.getCompletedCount().collect { count -> _state.update { it.copy(completedCount = count) } } } } } The ViewModel pattern: ...

March 26, 2026 · 9 min

Jetpack Compose Tutorial #22: Building the Data Layer — Room + Repository Pattern

In the previous tutorial, we planned our task manager app. Now we build the foundation — the data layer. The data layer is everything below the UI: the database, the repository, and the use cases. Get this right, and the UI layer writes itself. What We Build in This Tutorial data/ ├── local/ │ ├── TaskEntity.kt ← Database table definition │ ├── TaskDao.kt ← Database operations │ └── AppDatabase.kt ← Room database ├── mapper/ │ └── TaskMapper.kt ← Convert Entity ↔ Domain Model ├── repository/ │ └── TaskRepositoryImpl.kt ← Repository implementation │ domain/ ├── model/ │ ├── Task.kt ← Clean domain model │ ├── Category.kt ← Enum │ └── Priority.kt ← Enum ├── repository/ │ └── TaskRepository.kt ← Interface (contract) └── usecase/ ├── GetTasksUseCase.kt ├── AddTaskUseCase.kt ├── ToggleTaskUseCase.kt └── DeleteTaskUseCase.kt Step 1: Domain Models The domain layer is pure Kotlin — no Android dependencies, no Room annotations. This is the “truth” of your app. ...

March 25, 2026 · 11 min

Claude Code Remote Control: Control Your AI Agent from Your Phone

Anthropic released a feature that changes how you work with Claude Code. It is called Remote Control, and it does exactly what the name says: you can control a Claude Code session running on your laptop from your phone, tablet, or any browser. Start a task at your desk. Walk into a meeting. Keep watching from your phone. What is Claude Code Remote Control? Claude Code Remote Control connects the Claude mobile app (iOS and Android) and the web interface at claude.ai/code to a Claude Code session running on your local machine. ...

March 25, 2026 · 5 min

Jetpack Compose Tutorial #21: Planning the App — A Task Manager with Compose

You have learned every piece: layouts, state, navigation, ViewModel, MVI, Room, Hilt, animations, testing, and adaptive layouts. Now it is time to use them all together. In the next five tutorials, we will build a complete task manager app from scratch. Not a toy demo — a real app with real architecture that you could publish to Google Play. This tutorial is about planning — deciding what to build, how to organize the code, and what dependencies to use. No code yet. Just decisions. ...

March 25, 2026 · 8 min

AI Coding Tools Cheat Sheet 2026 — Claude, Cursor, Copilot, and More

Bookmark this page. Use Ctrl+F (or Cmd+F on Mac) to find what you need. This cheat sheet compares AI coding tools, their features, pricing, and best use cases. Last updated: March 2026 Tool Comparison Tool Type Best For Pricing (Mar 2026) Claude Code CLI agent Multi-file edits, refactoring, debugging $20/mo Pro, $100/$200 Max Cursor IDE (VS Code fork) Day-to-day coding with AI inline $20/mo (Pro) GitHub Copilot IDE extension Autocomplete, inline suggestions Free (limited), $10/mo Pro, $39/mo Pro+ Windsurf IDE (VS Code fork) Chat + agent workflows $15/mo (Pro) ChatGPT Chat Explaining code, brainstorming $20/mo (Plus) Gemini CLI CLI Quick questions, code review Free (1K req/day), Pro/Ultra plans Codex CLI CLI Code review, autonomous tasks OpenAI API pricing Feature Matrix Feature Claude Code Cursor Copilot Windsurf Autocomplete — Yes Yes Yes Chat Yes Yes Yes Yes Multi-file editing Yes Yes Limited Yes Terminal commands Yes Yes (Cmd+K in terminal) — — Agent mode Yes Yes Yes Yes Git integration Yes Yes Yes Yes MCP support Yes Yes Yes Yes Custom rules CLAUDE.md .cursorrules .github/copilot-instructions.md .windsurfrules Context window 200K (up to 1M on Max) 128K 128K 128K Claude Code Shortcuts Command Description /help Show available commands /clear Clear conversation /compact Compress context to save tokens /cost Show token usage and cost /init Create CLAUDE.md project file Esc Cancel current generation Shift+Tab Accept file edit Ctrl+C Exit Claude Code Tips # Run Claude Code claude # Start with a prompt claude "fix the failing tests" # Non-interactive mode claude -p "explain this function" < file.py # Use a specific model claude --model sonnet # or opus, haiku # Continue last conversation claude --continue CLAUDE.md — Project Instructions # CLAUDE.md - Use TypeScript strict mode - Tests: Jest with React Testing Library - Style: Tailwind CSS, no inline styles - Always run tests before committing Place CLAUDE.md in your project root. Claude reads it automatically. ...

March 25, 2026 · 4 min

Jetpack Compose Tutorial #20: Adaptive Layouts — Phones, Tablets, and Foldables

Your app looks great on a phone. But open it on a tablet and there is a giant empty space. Open it on a foldable and the layout breaks. In 2026, adaptive layouts are not optional. Google Play requires apps to support different screen sizes. And with foldables, tablets, and ChromeOS — your app will run on screens from 4 inches to 15 inches. This tutorial teaches you how to build one codebase that adapts to every screen. ...

March 25, 2026 · 10 min