# checkra1n — Full Blog Archive (English) > Auto-generated from src/data/posts. Updated 2026-06-25. > Site: https://www.checkra1n.dev ## About checkra1n checkra1n (GitHub: checkra1neth) is an onchain developer and AI architect with 15+ years in crypto. Solidity, Rust, TypeScript. Polymarket bots, Uniswap v4 hooks, AI audit pipelines. Remote from Ukraine. --- ## Level 0: Your First Step Into AI URL: https://www.checkra1n.dev/intel/ai-level-zero-guide Language: en Date: 2026-06-22 Category: AI Description: Zero to AI in one guide: pick your first chatbot, understand the interface, write better prompts, avoid 20 rookie mistakes, and try 10 hands-on exercises. Imagine you rode horses your whole life, and someone parked a spaceship in front of you. The dashboard has almost no buttons — just a text field waiting for your command. That is exactly how AI feels the first time you open it. If you have never used a neural network but want to start — this guide is for you. We go from absolute zero: kill the fear, press the first buttons, and get real value today. --- ### Step 1: Pick Your First Spaceship Many people think AI is one secret program. In reality, dozens of companies build neural networks. The big names: [ChatGPT](https://chatgpt.com) (OpenAI), [Gemini](https://gemini.google.com) (Google), [Claude](https://claude.ai) (Anthropic), [Grok](https://x.com/i/grok) (xAI), and [DeepSeek](https://deepseek.com). For your first week, do not overthink it. Open any of these three — they all work the same way: a chat window that looks like Telegram or WhatsApp. - ChatGPT: 55 - Gemini: 25 - DeepSeek: 20 **Pro Tip:** Company, model, and app are three different things. OpenAI is the company. GPT is the model. ChatGPT is the app you talk through. Like Apple → iPhone → iOS. You do not need to memorize this — but it stops a lot of confusion. --- ### Step 2: Chat Anatomy — Where to Click Every AI chat looks roughly the same. Four elements matter: - Text field — where you type your request. Hit Enter to send. - Paperclip / plus (+) — attach photos, PDFs, screenshots, spreadsheets, slides. - Side menu — conversation history lives here. - New chat — starts a fresh topic. Discussing vacation plans and now need a business plan? Open a new chat. --- ### Step 3: The Big Secret — It Is Not Alive The biggest barrier for beginners is psychological. It feels like a smart person on the other side, judging your questions. It is not. AI has no emotions. It never thinks "what a dumb question." It does not get offended, annoyed, or tired. Under the hood it is an advanced text-prediction system trained on massive amounts of data. Three rules follow from this: - Typos do not matter — write messy, mix Russian and English, skip punctuation. It usually understands. - It is infinitely patient — ask to explain simpler, longer, with examples, in other words. Ten times in a row. - It will not be offended — bad result? Say "redo it completely" or "too complex, explain like I am a beginner." --- ### Step 4: AI Is a Dialogue, Not an Exam The rookie mistake: trying to craft the perfect prompt on the first try. Best results come from iteration. ```text You: Write a post about coffee. AI: [mediocre result] You: Make it shorter. You: Add humor. You: Remove the sales pitch. You: Style it like a popular Telegram channel. → After 3-4 refinements, the result is 10x better. ``` AI is not a search engine. It is an assistant you steer as you go. --- ### Step 5: AI Confidently Lies **Pitfall:** When AI does not know something, it sometimes does not say "I do not know." It invents an answer. In tech this is called hallucination — fake books, fake laws, fake quotes, fake sources. The rule: the more important the information, the harder you verify it. - ideas - explanations - learning - drafts - analysis - medical advice - legal questions - financial recommendations - historical facts - statistics and numbers --- ### Step 6: Do Not Upload Secrets **Pitfall:** Never send passwords, bank card data, API keys, confidential company docs, or other people's personal data. If you would not show it to a stranger — do not paste it into a chatbot. **warning:** Check out the privacy settings in your chatbot interface. Most chatbots allow you to **turn off chat history training** to improve data privacy. --- ### Step 7: What AI Does Best - Explain complex topics — "Explain quantum physics like I am 12" - Write texts — articles, posts, emails, resumes - Teach — ask for a learning plan on any topic - Translate — with context, not word-for-word - Generate ideas — for business, content, projects - Summarize documents — upload a 100-page PDF, get a brief - Write code — even if you are not a programmer - Analyze images — e.g. a screenshot of a computer error --- ### Step 8: What AI Does Poorly - facts without verification - very recent events - complex legal questions - medical diagnosis - high-stakes financial decisions It is a helper. Not an oracle. --- ### Step 9: No Clear Brief — Garbage Output This is where most beginners trip. Compare: ```text # Bad Write a resume. # Good You are an experienced HR manager. Help me write a resume for a Junior QA position. I have no commercial experience, but 6 months of training and several pet projects. Format for LinkedIn. Output as ready-to-paste text. ``` A good prompt has three parts: - Role — who should AI pretend to be? ("You are a marketer with 10 years of experience") - Context — what is happening? Constraints? Goal? - Format — list, table, checklist, step-by-step plan? --- ### Steps 10–12: Beyond Text - search the web - analyze documents and spreadsheets - generate images - understand voice messages - write and run code - execute multi-step tasks Free tiers of most services are enough for your first months. Paid plans give stronger models, higher limits, faster responses. Learn on free first — pay when you hit the ceiling. Inside one chat, AI remembers previous messages — so "make it shorter" and "redo point three" work. Some services also store long-term memory across chats. Do not be surprised if it remembers your preferences later. --- ### The 80/20 Rule for Beginners Do not try to learn prompt engineering, agents, automations, APIs, and a dozen models on day one. Eighty percent of value comes from four skills: - Explain the task clearly - Give context - Ask for revisions - Verify important facts --- ### Level 0 Complete The path into AI does not start with heavy software or expensive courses. It starts when you open a chat window and type your thoughts into a text field. Once you see AI as a mirror of your prompt — a dialogue partner, not a magic ball — Level 0 is done. You are ready for Level 1. --- ### Practice: 10 Prompts Every Beginner Should Try Theory is infinite. Skill comes from doing. Copy any prompt below into ChatGPT, Gemini, Claude, or DeepSeek. ### 1. Explain a Complex Topic > Explain cryptocurrency in simple words. Imagine I am 12 years old. Use examples from everyday life. ### 2. Summarize a Document > I will send you an article. Give me a 10-point summary and highlight the key ideas. ### 3. Help Make a Decision > I am choosing between buying a laptop and building a desktop PC. Ask me questions and help me decide. ### 4. Build a Learning Plan > I want to learn marketing basics from scratch. Create a 30-day step-by-step plan, 1 hour per day. ### 5. Rewrite Text Better > I will send you text. Make it clearer, livelier, and more professional while keeping the meaning. ### 6. Play the Expert > You are an experienced fitness trainer. Help me build a home workout program. Ask necessary questions first. ### 7. Analyze an Image > Describe everything you see in this image. Pay attention to details and potential problems. ### 8. Generate Ideas > Give me 30 ideas for a Telegram travel channel. Split them into categories. ### 9. Teach Through Questions > I want to learn investing basics. Do not lecture me. Teach gradually through questions and short explanations. ### 10. Be My Assistant > You are my personal assistant. Help me organize my tasks for the week. Ask questions first to understand my situation. --- ### Bonus Exercise: Same Request, Two Ways ```text # Version 1 (vague) Write a post about coffee. # Version 2 (specific) You are an experienced content marketer. Write a post for a small coffee shop's Telegram channel. Audience: men and women 25-40. Tone: friendly and lively. Max 1000 characters. Add a catchy headline and a call to action. ``` **Pro Tip:** Compare the two results side by side. This single exercise teaches the core law of AI faster than any article: output quality mirrors input quality. --- ### 20 Rookie Mistakes Most people start with huge expectations. A few days later: "It is magic!" or "AI is useless." Usually the problem is usage, not the model. - Too vague — "Write a post" vs "Write a 1000-char post for a sports nutrition Telegram channel, audience men 20-35" - Expecting perfection on the first try — iterate with "shorter", "add examples", "change style" - Afraid to ask follow-ups — "explain more", "give an example", "why do you think so?" - Using AI like Google — search finds answers; AI helps you think, analyze, create - Blindly trusting facts — verify numbers, laws, medical and financial advice - Sending confidential data — passwords, bank info, secret docs - Ignoring file uploads — PDFs, images, tables unlock huge use cases - Not asking AI to ask questions first — "Help me start a business. Ask me questions to understand my situation." - Too little context — "How to lose weight?" vs "I am 35, sedentary job, 30 min/day, no gym access" - No output format — specify list, table, checklist, or 10-point summary - One chat for everything — new topic = new chat - Stopping at the first answer — try "give 5 more variants" or "show the opposite approach" - Assuming AI knows everything — especially recent events and niche local data - Trying to sound smart — plain language works better than jargon-filled prompts - Skipping roles — "Help me" vs "You are an experienced accountant" - Asking for too much at once — break big tasks into stages - Not checking math — especially for money-related calculations - Text only — try voice, images, documents, spreadsheets - Giving up too fast — the skill develops over a week of daily practice - Not experimenting — you cannot learn AI by reading alone --- ### The Golden Rule > Bad answer? Before blaming the AI, ask yourself: how clearly did I explain the task? In most cases, output quality is a reflection of input quality. If you tried at least half the exercises above — you are already past zero. Welcome to Level 1. --- ## From X Layer Hackathon to Base Mainnet URL: https://www.checkra1n.dev/intel/fanovo-base-migration Language: en Date: 2026-06-10 Category: DEV Description: How we rebuilt Fanovo tokenomics for Base: sale-first liquidity, Chainlink VRF packs, and UUPS upgradeable contracts — 18 Cursor sessions later. Fanovo shipped on X Layer for two hackathons. CORS proxies, commit-reveal bugs, memory leaks — we fixed those and wrote about it. But hackathon mainnet is not production mainnet. I had no capital to seed a FANOVO/USDC pool. Launch with 850k tokens and zero stables? That kills the token on block one. ### What Was Broken in the Economics? The real blocker was not the chain — it was the wiring. Sale USDC flowed into a treasury the owner could drain anytime. Liquidity was a slide deck, not a contract guarantee. Packs still used commit-reveal — fine for a hackathon, not for mainnet where users expect verifiable on-chain randomness. A fair launch with pre-seeded capital works if you have it. We did not. Our fix: a sale-first model. Buyers fund the pool we could not. ```text // Final 960k allocation (no team wallet) Sale: 110,000 FANOVO → buyers @ $0.50 Primary LP: 99,000 FANOVO → locked floor + 90% of sale USDC Secondary LP: 701,000 FANOVO → wide-range POL, not a sell wall Treasury: 50,000 FANOVO → ops, funded by fees not giveaways ``` **Pitfall:** A narrow concentrated-liquidity range ($0.51–$3) turns 700k POL into a price ceiling. Same tokens, wider range — thinner wall, easier upside. ### What Did We Rebuild? Chainlink VRF replaced commit-reveal for packs — provable randomness users can verify on BaseScan. OpenZeppelin UUPS proxies on everything except immutable hooks. Deploy scripts, subgraph, and frontend all target chain 8453 now. ```typescript // VRF fee must match tx gas price on Base L2 const { gasPriceForVrfQuote } = await fetchTxGasParams(client); const vrfCost = await fetchVrfCostWei(client, opener, abi, count, gasPriceForVrfQuote); // msg.value = quote + 20% buffer (excess refunded on-chain) ``` The frontend got the same treatment: VRF payment helpers, mobile tab prefetch, pack UI that actually shows your balance after mint. Cursor logged 18 sessions on this migration alone — tokenomics debates, Uniswap v4 LP ranges, multisig handoff runbooks. **Pro Tip:** If you cannot seed LP yourself, design the sale to fund liquidity automatically. Lock the primary pool. Put POL in a wide range. Zero team tokens is a feature, not a sacrifice. ### The Takeaway Moving chains is easy. Moving economics is not. Base gives you VRF, deep USDC liquidity, and an audience that reads allocations. We spent more time on the 960k spreadsheet than on any single Solidity file — and that is probably correct. > Hackathon code proves the idea. Mainnet code proves you are serious. --- ## Three Bugs That Nearly Killed Our Web3 Hackathon Project URL: https://www.checkra1n.dev/intel/tifosy-bugs Language: en Date: 2026-05-29 Category: DEV Description: CORS, commit-reveal race conditions, and Map size exceeded — surviving a 10-day hackathon on X Layer with Uniswap V4 hooks. We built Fanovo — a Uniswap V4 Hook protocol for the World Cup. Two hackathons at once, X Layer, 48 country tokens, 144 player tokens, bonding curves, commit-reveal packs. 10 days total. Sounded like an adventure. Spoiler: it was. 29 OpenCode sessions later, about half were about bugs. These three hurt the most. --- ### Bug #1: Why Was the RPC Cursed? Everything worked in MetaMask. Contracts deployed. Transactions went through. But the frontend loaded zero data. Wagmi just stayed silent. No errors. No logs. Turns out X Layer RPC did not send CORS headers for browser requests. MetaMask, being a browser extension, does not care about CORS. But wagmi uses fetch, and the browser quietly blocked every response. First attempt: Next.js rewrites pointing to the same RPC. Did not work. Rewrites did not forward POST bodies correctly, and the RPC returned 400. ```typescript // Before: Next.js rewrites const nextConfig = { async rewrites() { return [{ source: "/api/rpc", destination: "https://rpc.xlayer.tech/", }]; }, }; ``` We moved to a dedicated API route. Added User-Agent, CORS headers, and retry logic for 429 rate limits. After that, everything flew. ```typescript // After: dedicated API route export async function POST(request: NextRequest) { const body = await request.text(); const res = await fetch(RPC_URL, { method: "POST", headers: { "Content-Type": "application/json", "User-Agent": "fanovo-frontend/1.0", }, body, }); const data = await res.text(); return new NextResponse(data, { status: res.status, headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*", }, }); } ``` **Pitfall:** If your Web3 frontend works in MetaMask but loads no RPC data — check CORS. Not a contract bug, not a code bug. A dumb HTTP header. ### Bug #2: Why Would the Commit-Reveal Not Open a Second Pack? Pack opening used commit-reveal: user sends a hash, waits for confirmation, sends the original value. A fair scheme against frontrunning. First pack opens fine. Second one reverts. The contract still remembered the previous commit — it thought the user was already opening a pack. The slot never got cleared after reveal. ```solidity // Problem: commit slot not cleared after reveal function reveal(commitHash, value) { require(commits[msg.sender] == commitHash); // delete commits[msg.sender]; // this line was missing _openPack(msg.sender, value); } ``` Fix: one line — delete commits[msg.sender] after successful reveal. Plus emit a PackOpened event with the user address so the frontend can listen without reloading. ### Bug #3: Why Did Map Maximum Size Get Exceeded? The site worked. For about 10 minutes. Then Next.js crashed with "RangeError: Map maximum size exceeded". Not the browser — the server-side render just died. useBlockNumber from wagmi watches every block by default. On X Layer a block comes every 2 seconds. In 10 minutes the V8 Map had 300+ entries and hit the hard limit. ```typescript // Before: watches every block const { data: blockNumber } = useBlockNumber({ watch: true }); // After: polls every 15 seconds const { data: blockNumber } = useBlockNumber({ watch: true, query: { refetchInterval: 15_000 }, }); ``` We also built a server-side indexer for burnt stats — the client could not aggregate thousands of events. Moved computation to the server, served pre-calculated numbers. BURNT LAST 24H stopped being forever zero. **Pro Tip:** useBlockNumber({ watch: true }) without refetchInterval is a guaranteed memory leak. On fast chains like X Layer (2s blocks) it kills Next.js in 10 minutes. ### What Was the Takeaway? We shipped the project. Two hackathons, two contracts, Next.js frontend, all running on X Layer mainnet. The funny thing — none of these bugs were in the contract logic. CORS, a memory leak, a missing delete. This is what actually eats your time. > Web3 development is 20% smart contracts and 80% fighting the tools around them. --- ## Debugging a 200x Leverage Bot When the Numbers Do Not Add Up URL: https://www.checkra1n.dev/intel/mexc-pnl-debug Language: en Date: 2026-05-21 Category: DEV Description: How I spent 3 days debugging PnL discrepancies in a MEXC futures bot. Real money, real trades, and a single wrong assumption that broke everything. I fired up the bot with $50 on PEPE_USDT futures, 200x leverage. The strategy was simple: catch micro-moves, collect the spread, get out fast. Backtests looked great. First hour looked fine. Then I checked the exchange balance. ### What Was the Problem? The bot reported a small profit. MEXC showed a loss. Not a big one — a few dollars — but the direction was wrong. That should not happen with a deterministic PnL formula. I checked the code. I checked it again. Everything looked correct. The issue was subtle. The bot calculated drawdown from a hardcoded `dry_run_balance` of 100.0 USDT. My real balance was 50.0 USDT. So when the bot hit a 25% drawdown, it thought I still had 75 USDT. In reality I had 37.50 USDT. The numbers were off by half. ### What Did the Debug Loop Look Like? What followed was three days of tight iterations. Change a parameter. Watch it trade. Compare bot logs against exchange history. Rinse and repeat. I stopped counting after 68 edits to bot.py. ```python # Before: drawdown calculated from wrong baseline self._peak_balance = 100.0 # hardcoded # After: reset peak to actual balance on start self._peak_balance = stats.balance # real def reset_peak_balance(self) -> None: """Reset peak to current balance after exchange sync.""" self._peak_balance = self._stats.balance ``` That one-line fix — `self._peak_balance = self._stats.balance` — took two days to find. The bug was not in the math. It was in the assumption that the default balance was the real balance. ### What Actually Fixed It - Reset peak_balance to actual exchange balance on startup, not the dry_run default - Removed deal_flow_threshold filter that was blocking valid entry signals - Lowered min_deal_flow_count from 3 to 2 to catch more micro-moves - Dropped entry_confirm_delay from 0.1s to 0.0s — speed matters at 200x - Added real-time PnL audit logging that prints every close fill ```python # Real-time audit log for every close print(f"[WS_CLOSE] side={side} dealAvg={deal_avg_price} " f"profit={realized} fee={fee} net_pnl={net_pnl}") ``` The audit log was the real breakthrough. Before that, the bot silently swallowed mismatches. After adding the print, I watched the numbers diverge in real time. The bot thought a trade was +$0.80. The exchange recorded -$0.15. The gap was the fee. ### What Were the Numbers? - 68 edits to bot.py across 3 sessions - 11 config parameters changed, 3 removed entirely - 200x leverage = 0.5% move is a 100% balance swing - 1 wrong assumption about initial balance broke the whole risk model - Fix: 1 line of code + 6 lines of logging --- **Pro Tip:** Always log the raw exchange response before your bot processes it. If the exchange says the fee is 0.02 USDT and your bot calculates 0.015, you want to know that immediately — not after 50 trades. **Pitfall:** Hardcoding defaults that look "reasonable" is a trap. 100.0 USDT is a fine default for paper trading. For live trading with 50.0 USDT, it is a disaster. Always sync state from the exchange on startup. --- ## I Built a 7-Stage Blog Pipeline with Claude Code URL: https://www.checkra1n.dev/intel/blog-pipeline-claude-code Language: en Date: 2026-02-03 Category: AUTOMATION Description: Build a 7-stage blog pipeline with Claude Code skills. From topic to published post with translations, SEO, and Telegram announcements. Writing blog posts manually is a pain. SEO metadata, translations, deployment, social announcements — each step is a context switch that kills momentum. ### What Was the Problem? I wanted to write more but the friction was real. Draft in one place, translate in another, deploy via CLI, then copy-paste to Telegram. Half my energy went to orchestration, not writing. ### Which Failed Attempts Came First? First I tried shell scripts. Too brittle. Then GitHub Actions — overkill for a personal blog. I needed something that understood context, could write, edit, and execute. ### Why Claude Code Skills? Claude Code has a skills system — markdown files that define reusable workflows. I built a 7-stage pipeline: ```bash ANALYZE → WRITE → EDIT → TRANSLATE → BUILD → DEPLOY → ANNOUNCE # One command triggers all 7 stages: /blog-pipeline How I debugged a Vite HMR issue ``` Each stage has clear inputs and outputs. ANALYZE scans my Claude sessions for struggle stories. WRITE generates the post with SEO and cover art specs. TRANSLATE handles EN→UK. DEPLOY pushes to Vercel. ANNOUNCE posts to my Telegram channel via a Railway-hosted bot. ```bash # Stage 7: ANNOUNCE to Telegram curl -X POST "$RAILWAY_API_URL" \ -H "X-API-Key: $RAILWAY_API_KEY" \ -d '{"content": "📝 New post! **Title** 🔗 URL"}' ``` --- **Pro Tip:** The best automation is invisible. One command, zero context switches. Let the machine handle the boring parts so you can focus on the interesting ones. --- ## AI Pair Programming with Real Money on the Line URL: https://www.checkra1n.dev/intel/claude-copilot-live-trading Language: en Date: 2025-01-27 Category: AI Description: How 20 Claude sessions and 80 bot restarts built a Polymarket trading system. Real story of AI-assisted development when every bug costs actual dollars. My shell history doesn't lie. 80+ cargo run invocations. 20 Claude sessions. Budget swinging from $600 down to $50 and back up. This is what AI-assisted development actually looks like when every bug costs real dollars. ### What Was the Setup? I was building a hedged-pairs trading bot for Polymarket in Rust. The idea: buy both sides of a binary market (YES + NO) when the combined price drops below $0.99, pocket the guaranteed penny. Simple math. Brutal engineering. ### What Did the Debug Loop Look Like? The workflow became a tight loop: run the bot, watch it break against live market conditions, Alt+Tab to Claude, paste the error, get a fix, apply it, restart. Rinse and repeat. The compiler was happy. The market was not. ```bash # My actual shell history, compressed: cargo run --bin adaptive_bot -- --auto --budget 500 --live # Connection timeout. Fix. cargo run --bin adaptive_bot -- --auto --budget 500 --live # API deser error: "expected string, got integer". Fix. cargo run --bin adaptive_bot -- --auto --budget 200 --live # Position imbalance: YES=98, NO=177. Stuck. claude # "help me design a mathematical protection system" # ... 12 laws of trading later ... cargo run --bin adaptive_bot -- --auto --budget 50 --live # Bot too safe to trade. ЗАКОН 11 blocks everything. ``` ### What Claude Actually Did Claude wasn't just fixing syntax. It co-designed a system of 12 mathematical trading laws — from basic imbalance checks to advanced hedging proofs. When ЗАКОН 6 started blocking one side of paired grid orders, we discovered together that the law was mathematically correct but operationally wrong. Paired orders don't change imbalance, so the single-order check was a false positive. The real power wasn't code generation. It was having a partner who could context-switch between Rust borrow checker errors, order book math, WebSocket race conditions, and "why does the UI show profit when we're at a loss" — all in the same afternoon. ### What Were the Numbers? - 80+ bot restarts across 3 weeks - 20 Claude debugging sessions - 12 mathematical trading laws designed collaboratively - 1 race condition caught (WebSocket fill before REST order ID) - 29MB log file analyzed to find a single info!() firing 37,818 times - Budget range: $50 — $600 (confidence correlated with bug count) --- **Pro Tip:** AI pair programming shines when the problem space is too wide for one brain. Trading bots live at the intersection of systems programming, financial math, and real-time APIs. No single person holds all that context at once. But a human + AI pair can. --- ## What Is Vibe Coding? URL: https://www.checkra1n.dev/intel/vibe-coding-agents Language: en Date: 2025-01-27 Category: AI Description: What is vibe coding with AI? A practitioner guide: how I built an entire blog system with Claude Code agents — zero manual keystrokes. Vibe coding explained for developers. Vibe coding is a development workflow where you describe intent in natural language and AI agents (like Claude Code or Cursor) write the implementation. You stop being the typist and become the director — specs, reviews, architecture decisions, and "try again" loops. I didn't write a single line of this blog system. Not one. I described what I wanted, and an AI agent spawned the entire pipeline — components, types, styles, seven skill files. ### What Is Vibe Coding with AI? Vibe coding with AI means orchestrating coding agents instead of manually implementing every function. The human job: clear specs, file paths, interfaces, acceptance criteria. The agent job: syntax, boilerplate, refactors, tests. The vibe part is flow state — you stay in creative/architect mode while the machine handles the tedious keystrokes. It is not "skip testing" or "ship without reading diffs." It is delegating implementation to agents you supervise. ### What Was the Setup? I had a portfolio site. Terminal aesthetic, glassmorphism, the whole hacker vibe. But no blog. I wanted one that matched the existing design system — green on black, VT323 font, CRT scanlines. And I wanted a content pipeline: analyze sessions, write drafts, edit, optimize SEO, translate to Ukrainian, generate visual specs. ### How Did the Experiment Work? Instead of coding it myself, I wrote a plan. A detailed spec — interfaces, component structures, file paths, CSS patterns. Then I handed it to Claude Code and said "implement this." ```typescript // The entire blog system: // 7 skill files (agents + templates) // 6 TypeScript source files // 4 CSS modules // 2 modified existing files // 0 lines typed manually ``` ### What Was the Result? It worked. The agent read existing components, matched the patterns — framer-motion animations, soundManager integration, CSS variables from the design system. It created a BlogList with the same filter pattern as MissionLog, a BlogPostView with content block rendering, language toggle, the works. The six pipeline agents — analyzer, writer, editor, SEO optimizer, translator, visual designer — each have their own skill file with temperature settings, permission scopes, and output contracts. They chain: ANALYZED → DRAFTED → EDITED → SEO_OPTIMIZED → TRANSLATED → VISUAL_READY. --- **Pro Tip:** The quality of AI output is directly proportional to the quality of your spec. Vibe coding isn't about being lazy — it's about being precise with intent and letting the machine handle the syntax. ---