Genel Bakış
Software Engineer (Full-Stack) @VulnHero
Hakkımda
Bilgisayar mühendisliği mezunuyum; siber güvenlik, API altyapısı, veritabanı sistemleri ve AI destekli iş akışları üzerinde developer-first ürünler geliştiriyorum.
Çalışmalarım çoğunlukla ürün deneyimi ile sistem davranışının kesiştiği yerde duruyor: auth olayları, erişim kontrol sınırları, latency görünürlüğü, şema netliği, iç araçlar ve pratik otomasyon.
Karmaşık backend davranışlarını ekiplerin gerçekten okuyabildiği, işletebildiği ve gerçek koşullarda üzerinde düşünebildiği arayüzlere dönüştürmeyi seviyorum.
GitHub Contributions
Stack
Components(6)
Sistemlerin gerçekte nasıl davrandığını anlatan bileşenler geliştiriyorum: auth olayları, webhook teslimatları, API latency sıçramaları, migration riski ve geliştiricilerin çoğu zaman elle yeniden kurmak zorunda kaldığı şema ilişkileri.
Siber Güvenlik / API / Veritabanı / Developer-first UI-UX
Auth Audit Timeline
Kimlik doğrulama, session ve bloklama olayları için güvenlik odaklı denetim akışı sunar.
Security Event Correlation Feed
Auth, network, secret ve queue sinyallerini geliştiricilerin ve responder ekiplerinin hızlı aksiyon alabileceği incident kümelerine bağlar.
Scratch Reveal Card
Kullanıcıların yüzeyi kazıyarak teklif, ipucu ya da hikâye anı keşfettiği etkileşimli reveal deneyimi kurar.
Command Discovery Card
Klavye kısayollarını, aksiyon gruplarını ve bağlamsal komutları tam command palette açılmadan önce öğretir.
API Latency Monitor
p50 ve p95 latency'yi hata sıçramalarıyla birlikte göstererek geliştiricilerin regresyonu incident olmadan fark etmesini sağlar.
Database Schema Viewer
Tabloları, kolonları ve ilişkileri backend yapısı ile ürün deneyimi arasındaki bağlamı kaybetmeden inceletir.
Blog(8)
Claude vs Claude Code vs Cowork — Which One Do You Actually Need?
Anthropic now ships three distinct AI tools. They look related, but they solve entirely different problems. Here’s how to choose without second-guessing yourself. Three products, one brand, infinite confusion. If you’ve found yourself staring at Anthropic’s lineup — Claude AI , Claude Code , and Cowork — and wondering why there are three separate things when they all seem to “do AI stuff,” you are not alone. The company has been quietly expanding its surface area, and the distinctions between these tools are more meaningful than they first appear. This article breaks down each Anthropic product clearly, compares them side by side, and — most importantly — tells you which AI tool to reach for depending on what you’re trying to accomplish. “The right tool isn’t the most powerful one. It’s the one that fits the shape of your problem.” The Big Picture: Three Layers of Human-AI Interaction At its core, Anthropic has built three layers of human-AI interaction: a conversational layer (Claude AI), a developer autonomy layer (Claude Code), and a workflow automation layer (Cowork). Each targets a different user, a different context, and a different definition of “getting things done.” Claude AI — The Conversational AI Assistant Claude AI is what most people mean when they say “Claude.” It lives at claude.ai, runs in a browser or mobile app, and asks nothing of you technically. You type. It responds. That’s the entire contract. What makes Claude AI genuinely powerful is the breadth of what that conversation can encompass. Need a first draft of a board memo? A plain-English breakdown of a dense research paper? A devil’s advocate on your startup pitch? Claude AI handles all of these fluidly, with particular strength in long-form reasoning and nuanced analysis. The workflow is simple and circular: you prompt , Claude responds through a chat interface, and you iterate. Memory is rich within a conversation, but it doesn’t persist across sessions by default, and the model has no access to your local files unless you explicitly paste content in. This is simultaneously its strength and its ceiling. For the vast majority of knowledge work — writing, research, brainstorming, analysis — Claude AI is more than sufficient. But if you need the AI to act in the world rather than just produce text , you’ll hit a wall. Best for: Writers, researchers, students, marketers, consultants, and any knowledge worker who wants AI-augmented thinking without any setup. Claude Code — The Autonomous Coding Agent Claude Code is a fundamentally different product. It isn’t a chat interface — it’s a command-line agent that runs in your terminal and operates directly on your file system. You give it a task. It reads your entire codebase, plans an implementation approach, writes or modifies files, runs tests, interprets failures, and iterates — largely without your hand-holding. The critical differentiator from Claude AI is persistent file-system memory and multi-file awareness . Claude Code genuinely understands the architecture of a large codebase in a way that no chat-pasted snippet can replicate. It can trace dependencies across modules, refactor legacy code consistently throughout an entire project, and build test suites from scratch. “Claude Code doesn’t just autocomplete lines — it understands your entire project’s architecture and makes decisions accordingly.” This makes Claude Code invaluable for tasks like: refactoring a legacy Django app to use async views across dozens of files; implementing a new feature end-to-end with tests; or debugging a subtle race condition that only surfaces when you trace execution across five interdependent modules. The caveats are real, however. Claude Code is autonomous, which means it can make consequential changes fast. That’s a feature until it becomes a liability. Any serious use requires a solid Git workflow, a disciplined habit of reviewing diffs before committing, and a clear-eyed understanding that the developer remains responsible for what ships. Usage costs also accumulate quickly on large or continuous tasks. Best for: Software engineers, full-stack developers, and engineering teams who want autonomous, context-aware coding assistance at the codebase level Claude Cowork — The Desktop Workflow Automator Cowork is the newest and least-understood member of the Anthropic family. It’s a desktop application designed explicitly for non-developers who want to automate repetitive tasks without writing a single line of code. Consider the business analyst who needs to extract structured data from 200 PDFs and populate a spreadsheet. Or the operations manager who spends every Monday renaming, sorting, and relocating files across three different folders. Or the recruiter manually copy-pasting applicant data between two systems. Cowork targets exactly these workflows. Its interaction model mirrors Claude AI’s conversational loop but adds a critical execution layer: after you describe the task, Cowork can actually organize files, edit and update documents, and orchestrate multi-step cross-application workflows — all from a chat interface, no terminal or Python environment required. The honest limitations: Cowork is still in beta. Its configuration options are limited compared to what a developer could achieve with Claude Code or the raw Anthropic API. But as a product for extending AI utility to non-engineers, it represents something meaningfully new in Anthropic’s lineup. Best for: Business analysts, operations managers, non-technical teams, and anyone drowning in repetitive file and application tasks who lacks the technical background to script solutions. Claude AI vs Claude Code vs Cowork: Side-by-Side Comparison Comparison of key features across all three Anthropic AI toolsFeatureClaude AIClaude CodeCowork Interface Web / Mobile ChatCommand Line (CLI)Desktop App Setup Required NoneTechnical (developer)Minimal (install app) File System Access NoYes — full codebaseYes — desktop files Autonomy Level Low (human-driven)High (agent)Medium (guided) Target User EveryoneDevelopersNon-technical teams Maturity ProductionProductionBeta Choosing the Right Tool: A Scenario-by-Scenario Guide Use this guide to find the right Anthropic tool for your specific scenarioYour ScenarioBest ToolWriting a blog post, report, or emailClaude AIBrainstorming and exploring ideas conversationallyClaude AISummarizing or explaining complex researchClaude AIRefactoring a multi-file codebase at scaleClaude CodeBuilding features autonomously with full test coverageClaude CodeDebugging complex cross-module issuesClaude CodeOrganizing or renaming hundreds of files in bulkCoworkExtracting data from PDFs into spreadsheetsCoworkAutomating copy-paste workflows between desktop appsCowork Frequently Asked Questions About Claude, Claude Code, and Cowork What is the difference between Claude AI and Claude Code? Claude AI is a conversational chat interface ideal for writing, research, and brainstorming — no setup required. Claude Code is a command-line autonomous agent that operates on your local file system, reads your entire codebase, and performs multi-file coding tasks with deep architectural context. The key difference is execution: Claude AI produces text, while Claude Code takes action on your actual code. Who is Claude Cowork designed for? Claude Cowork is designed for non-developers who want to automate repetitive file management and cross-application desktop workflows without writing code. Business analysts, operations managers, and admin professionals who deal with bulk file tasks, data extraction from PDFs, and manual copy-paste between apps are Cowork’s primary audience. Do I need all three Anthropic AI tools? Not necessarily. Most individual users only need Claude AI. Software engineers who want autonomous, codebase-level assistance should evaluate Claude Code. Non-technical users with desktop automation needs should try Cowork. Some teams — particularly those mixing engineering, operations, and content roles — benefit from using all three in complementary ways. Is Claude Code free to use? Claude Code usage costs apply based on the volume of tokens processed. For large codebases or continuous autonomous tasks, costs can accumulate quickly. It’s worth budgeting carefully and testing with smaller tasks before deploying at scale. Is Cowork available now? As of early 2026, Cowork is available as a beta product. It is a desktop application for non-developers, but it currently has limited configuration options compared to more mature Anthropic products. Expect active development and feature expansion. Final Take: The Tool That Fits Your Problem When you step back, the three Anthropic products map onto a clean framework. Claude AI augments human thinking — you stay in the loop on every decision, and the value is in the quality of the output text. Claude Code delegates technical execution — you define the goal, and the agent handles implementation autonomously. Cowork replaces manual digital labor — repetitive, rule-bound tasks that previously required a human clicking through interfaces. None of these products makes the others obsolete. A software team might use all three simultaneously: Claude AI for documentation and design thinking, Claude Code for implementation, and Cowork for automating the non-technical business workflows surrounding the product. “The mistake isn’t picking the wrong tool. It’s assuming one tool covers everything.” If you’re a writer, researcher, student, or knowledge worker, Claude AI is your entry point and will handle the vast majority of your needs. If you’re an engineer who wants to delegate entire implementation tasks to a capable autonomous agent, Claude Code is worth serious evaluation. And if you’re drowning in repetitive file and application work without a technical background, Cowork is the most underrated option in the Anthropic lineup right now. The AI frontier is expanding. Pick the tool that fits your actual problem — not the one with the most impressive demo reel. Tags: #Anthropic #Claude #ClaudeAI #ClaudeCode #ClaudeCowork #ArtificialIntelligence #GenAI #Productivity #Automation #SoftwareDevelopment #TechTrends #DevTools #FutureOfWork #NoCode #LLM 📧 Subscribe for more AI development insights | 👏 Clap if this helped you | 💬 Share your ClaudeCode experiences in the comments
- Published on

From REST APIs to Blockchain: My Journey Building 10 Real-World Go Projects
Hey There! 👋 So, I did something a bit crazy. I spent the last few months building 10 complete Go projects from scratch, and honestly? It was one of the best learning experiences I’ve ever had. Let me tell you why. You know that feeling when you’re learning a new programming language, and you’re stuck doing tutorials that teach you “Hello World” for the millionth time? Yeah, I was tired of that too. I wanted to build real stuff — the kind of projects you’d actually use in production. That’s how this series was born. Why Go? And Why These Projects? Look, I’ll be honest with you. Go isn’t the sexiest language out there. It doesn’t have fancy features like some other languages. But you know what? It just works. When you need to handle thousands of concurrent connections without breaking a sweat? Go. When you want code that’s easy to read and maintain? Go. When you need something that compiles in seconds and runs blazingly fast? You guessed it — Go. So I thought: “What if I could learn Go by building the kind of stuff companies actually need?” That’s exactly what I did. The Projects: A Quick Tour 1. RESTful API — The Foundation 🏗️ Port: 8080 This is where everyone should start. No fluff, no fancy frameworks — just pure REST principles with Go. What I learned: How HTTP really works (not just the theory) Middleware patterns that actually make sense Why everyone loves Gorilla Mux JSON marshaling/unmarshaling without tearing my hair out Real talk: This project taught me more about backend development in a week than months of tutorials. There’s something about actually building CRUD operations that makes everything click. // My favorite part - it's so clean! router.HandleFunc("/api/users", getUsers).Methods("GET") router.HandleFunc("/api/users/{id}", getUser).Methods("GET") Go-10-projects-for-education/01-restful-api at main · Yemresalcan/Go-10-projects-for-education ⭐ 2. Real-Time Chat App — Where Go Shines ✨ Port: 8081 This is where I fell in love with Go. Seriously.Building a chat app in most languages? Good luck managing those connections. But with Go’s goroutines and channels? It’s almost too easy . The “Wow” moments: Watching 100+ users connect simultaneously without the server even breaking a sweat Understanding how WebSocket works at a deep level The beautiful simplicity of the Hub pattern Goroutines making concurrent programming feel natural // This is where the magic happens go client.writePump() go client.readPump() Pro tip: Run this project, open 10 browser tabs, and watch messages fly between them in real-time. It’s oddly satisfying. Go-10-projects-for-education/02-chat-app at main · Yemresalcan/Go-10-projects-for-education ⭐ 3. URL Shortener — More Than You’d Think 🔗 Port: 8082 Ever wondered how bit.ly or TinyURL actually work? I did. So I built one. What surprised me: MD5 hashing is both simple and powerful HTTP redirects have nuances (301 vs 302 matters!) In-memory storage can be really fast Analytics are crucial (everyone wants to know how many clicks) The coolest part? You can actually use this. I’ve been using my own URL shortener for sharing links with friends! Go-10-projects-for-education/03-url-shortener at main · Yemresalcan/Go-10-projects-for-education ⭐ 4. Task Scheduler — Set It and Forget It ⏰ Port: 8083 This one solved a real problem for me. I needed to automate some tasks, and cron syntax always confused me. So I built a visual interface for it. What makes it cool: Cron expressions become visual and understandable Real-time dashboard shows what’s running Background jobs without blocking the main thread Perfect for automation nerds (like me) Use case: I’m using this to backup my databases daily. Set it once, never worry about it again. Go-10-projects-for-education/04-task-scheduler at main · Yemresalcan/Go-10-projects-for-education ⭐ 5. GraphQL API — The REST Alternative 🚀 Port: 8084 REST is great, but have you tried GraphQL? Game changer. Why I love it: Request exactly what you need, nothing more No more over-fetching or under-fetching The schema system is beautiful GraphQL Playground makes testing fun Honest moment: The learning curve is steeper than REST, but once it clicks? You’ll wonder why you waited so long. query { users { id name email } } # That's it. No complicated URL parameters. Go-10-projects-for-education/05-graphql-api at main · Yemresalcan/Go-10-projects-for-education ⭐ 6. File Sharing Service — Dropbox Vibes 📁 Port: 8085 Building this taught me that file handling in Go is actually pleasant. Who knew? Features I’m proud of: Drag & drop upload (feels so modern!) Unique shareable links 10MB file size limit (because we need boundaries) Download tracking Real-world use: I share large files with my team using this. No more sketchy third-party services. Go-10-projects-for-education/06-file-sharing at main · Yemresalcan/Go-10-projects-for-education ⭐ 7. Web Scraper — Data Extraction Made Easy 🕷️ Port: 8086 This project answers the question: “How do price comparison websites work?” What I discovered: Goquery makes HTML parsing actually enjoyable CSS selectors are incredibly powerful User-Agent headers matter more than you think Always respect robots.txt (be a good internet citizen!) Fun fact: I used this to track prices on my favorite online stores. Got some sweet deals! Go-10-projects-for-education/07-web-scraper at main · Yemresalcan/Go-10-projects-for-education ⭐ 8. Credit Card Validator — The Math Behind Payments 💳 Port: 8090 Ever wondered how websites instantly know if you typed your card number wrong? It’s all about the Luhn algorithm. Mind-blowing stuff: Card numbers aren’t random The last digit is a checksum You can detect the card type from the first few digits CVV lengths vary by card type Disclaimer: This is educational only. Never store real card data! Use payment gateways like Stripe. // The Luhn algorithm in action - so elegant! func luhnValidate(number string) bool { // Mathematical magic happens here } Go-10-projects-for-education/08-credit-card-validator at main · Yemresalcan/Go-10-projects-for-education ⭐ 9. Image Processing Service — Instagram for Developers 🎨 Port: 8091 This was the most visually rewarding project. Seeing images transform in real-time is just cool. What I built: Resize with quality (Lanczos algorithm — fancy!) Filters: Grayscale, Blur, Sharpen, Sepia, Invert Brightness and contrast adjustments Format conversion (JPEG ↔ PNG) Base64 encoding for instant preview Coolest feature: The sepia filter I implemented from scratch. It’s like time-traveling your photos. Performance note: Processing a 4K image takes less than a second. Go’s concurrency FTW! Go-10-projects-for-education/09-image-processing at main · Yemresalcan/Go-10-projects-for-education ⭐ 10. Blockchain — The Grand Finale ⛓️ Port: 8092 Okay, this one. THIS ONE. This is where everything comes together. Building a blockchain from scratch taught me more about cryptocurrency than reading a hundred articles ever could. What’s inside: Proof of Work mining (watching your CPU sweat is oddly satisfying) SHA-256 cryptographic hashing Chain validation and immutability Transaction management The famous Genesis Block The “Aha!” moment: When I mined my first block and saw the hash with four leading zeros. I literally said “Oooh” out loud. Go-10-projects-for-education/10-blockchain at main · Yemresalcan/Go-10-projects-for-education ⭐ // Mining in action - brute force at its finest for { hash := calculateHash(block) if strings.HasPrefix(hash, target) { return hash // Found it! } block.Nonce++ } Real Talk: Who Is This For? 🎓 Students If you’re learning Go and tired of basic tutorials, this is for you. Build something you can actually show off. 💼 Professionals Switching to Go? These projects will get you productive fast. I’ve literally used these patterns in production code. 🚀 Entrepreneurs Need to build an MVP? Pick a few of these projects, combine them, and you’ve got a solid backend. 🤓 Curious Minds Want to understand how things work under the hood? These projects will scratch that itch. My Learning Journey (The Real Story) Week 1: Started with REST API. Felt confident. “This is easy!” Week 2: Built the chat app. Mind = blown. Fell in love with goroutines. Week 3: URL shortener and task scheduler. Started feeling like a real Go developer. Week 4: GraphQL and file sharing. Realized Go is perfect for backend services. Week 5: Web scraper and card validator. Algorithms in Go are surprisingly elegant. Week 6: Image processing. Learned that Go isn’t just for APIs and servers. Week 7–8: Blockchain. Debugged for days. Finally understood cryptocurrency. Worth it. Performance Stories (Because Numbers Are Cool) Let me share some real metrics from these projects: Chat App: Handled 5,000 concurrent WebSocket connections Memory usage: ~200MB CPU: Barely noticeable Message latency: RESTful API: Response time: 0.5ms average Throughput: 50,000 requests/second (on my laptop!) Memory: Stable at ~30MB Blockchain: Mining difficulty 4: ~5 seconds Difficulty 5: ~80 seconds Difficulty 6: Make some coffee (seriously) Getting Started (Your Turn!) Here’s how you can dive in right now: 1. Clone It git clone https://github.com/Yemresalcan/Go-10-projects-for-education.git cd Go-10-projects-for-education 2. Pick Your Adventure cd 01-restful-api # I recommend starting here 3. Install Dependencies go mod download 4. Run It go run main.go Each project has its own README with detailed explanations, code walkthroughs, and usage examples. What You’ll Actually Learn Not the boring theoretical stuff, but practical skills: ✅ Backend Development — REST, GraphQL, WebSocket — the whole shebang ✅ Concurrent Programming — Goroutines and channels without fear ✅ Algorithms — Hashing, validation, image processing ✅ System Design — How real applications are structured ✅ Best Practices — Code that other developers will actually want to read ✅ Problem Solving — Debug skills you’ll use every day Real-World Applications These aren’t toy projects. Here’s what you could actually build: E-commerce Backend — Combine REST API + File Sharing + Image Processing Social Platform — Chat + GraphQL + Image Processing SaaS Application — Task Scheduler + REST API + File Sharing Analytics Tool — Web Scraper + REST API + Data Storage Fintech App — Card Validator + Blockchain concepts + Security The Community Aspect This is open source (MIT licensed), which means: ✨ Free forever 🔧 You can modify it 📚 You can learn from it 🤝 You can contribute to it Found a bug? Want to add a feature? PRs are welcome! GitHub: https://github.com/Yemresalcan/Go-10-projects-for-education What’s Next? I’m planning to add more projects: Microservices architecture with service discovery gRPC implementation OAuth2 authentication system Redis caching layer Kubernetes deployment configs Full CI/CD pipeline My Honest Mistakes (Learn From Them!) Mistake #1: Tried to build blockchain first. Terrible idea. Start simple. Mistake #2: Didn’t read about goroutines before building chat app. Confused myself for days. Mistake #3: Ignored error handling early on. Paid the price during debugging. Mistake #4: Didn’t test with concurrent users. Found bugs only in “production” (localhost counts, right?). Lesson learned: Follow the difficulty order. There’s a reason it’s structured that way. Final Thoughts Look, I’m not going to tell you this will make you a Go expert overnight. But I will tell you this: these projects will teach you more than months of tutorial hell ever could. You’ll struggle. You’ll debug. You’ll question your life choices at 2 AM when that blockchain won’t validate. But when it finally works? That feeling is why we code. Plus, you’ll have 10 working projects in your portfolio. That’s something tangible you can show to potential employers or clients. Let’s Connect! Built something cool with these projects? Found a bug? Just want to chat about Go? Find me here: 🐙 GitHub: @Yemresalcan 💼 LinkedIn: @Yunusemresalcan One More Thing… If this project helps you land a job, learn something new, or build something cool — drop me a message. Seriously. That stuff makes my day. And if you found this useful, give it a ⭐ on GitHub. It helps others find it too! Ready to start your Go journey? Clone the repo and pick a project. Your future self will thank you. 🔗 Repository: https://github.com/Yemresalcan/Go-10-projects-for-education P.S. — If you actually read this entire article, you’re my kind of developer. Now stop reading and start coding! 😉
- Published on
Developing a Production-Ready E-Commerce API with .NET
Developing a Production-Ready E-Commerce API with .NET 9: An Engineering Journey from Scratch to Enterprise-Level Notes on Modern Software Architecture, Microservice Patterns, and Enterprise-Grade Observability Introduction: From Ground Zero to the First Line As a software engineer, the moments I enjoy the most are when I bring an idea to life from scratch. This project was born precisely from that passion. My goal was to test the innovations and performance potential offered by .NET 9 through a high-traffic and realistic scenario: developing a production-ready, scalable, and enterprise-level monitorable e-commerce API. I had been curious about .NET 9 for a long time. I saw this project as an opportunity to both experience its new features and measure its performance in a high-traffic scenario. As I embarked on the journey, I set clear goals for myself: Build a system capable of handling 10,000+ requests per second Design a horizontally scalable architecture Achieve 99.9% uptime Provide full observability (monitoring, logging, tracing) Implement modern patterns like Clean Architecture, CQRS, and Event Sourcing These goals initially seemed like an ambitious “technology dream,” but each step of the project turned into a serious engineering challenge. User Stories That Shaped the Architecture Epic 1: Customer Experience User Story 1: Product Discovery “As a customer, I want to quickly search for products and find what I’m looking for without wasting time.” Technical Decisions: Elasticsearch for search performance in milliseconds. Redis for caching frequently accessed search results. Enriching the user experience with autocomplete and real-time faceted filtering. To achieve this, I implemented a search infrastructure powered by Elasticsearch and cached with Redis: var cached = await _cacheService.GetAsync (cacheKey); if (cached != null) return cached; var searchResponse = await _elasticClient.SearchAsync (s => s .Index("products") .Query(q => BuildOptimizedQuery(q, request)) .Aggregations(a => BuildFacetAggregations()) .Highlight(h => h.Fields(f => f.Field(p => p.Name))) ); var result = MapToSearchResult(searchResponse); await _cacheService.SetAsync(cacheKey, result, TimeSpan.FromMinutes(15)); return result; Result: This architecture reduced the average search time to 45ms and achieved a cache hit ratio of 85% . User Story 2 — Seamless Ordering “As a customer, I want to complete my order without delay or error.” Technical Decisions: Event-driven order processing workflow. Real-time inventory management for stock consistency. Optimistic Concurrency Control to maintain data integrity. Optimistic concurrency control was applied to ensure stock consistency, and inventory updates were published via an event: if (product.StockQuantity Result: Zero overselling and a 99.9% successful order completion rate. Epic 2: Business Operations User Story 3 — Inventory Management “As a store manager, I want to track inventory in real-time to prevent overselling .” Technical Decisions: Event Sourcing to keep an immutable record of all stock movements. Real-time synchronization via an event-based approach using RabbitMQ . Automated reorder notifications for critical stock levels. Creating an audit trail for every stock movement. Here is an example of an event handler that processes stock updates: public async Task Handle(ProductStockUpdatedEvent evt, CancellationToken ct) { var inventory = await _inventoryRepository.GetByProductIdAsync(evt.ProductId, ct); inventory.UpdateStock(evt.NewStock); await _inventoryRepository.SaveAsync(inventory, ct); } Result: This approach ensured that inventory status was synchronized across the system in real-time while creating an audit trail for every change. User Story 4: Performance Monitoring “As a DevOps engineer, I want to monitor system health and performance in real-time to respond instantly to potential issues.” Technical Stack: A combination of Prometheus (metrics collection), Grafana (visualization), and AlertManager (alerting mechanism) was used. Monitored metrics were divided into two categories: Business Metrics: Order rate, real-time revenue, customer conversion rate, etc. Technical Metrics: CPU/memory usage, network traffic, database query latency, API error rates, etc. Architecture Evolution: From Monolith to Microservices Phase 1: Foundation with Clean Architecture The journey began with establishing a solid foundation using Clean Architecture principles: Project Structure: Achieved Results: ⚙️ MTTR (Mean Time to Repair): Reduced from 45 minutes to 3 minutes . 📈 Uptime: Reached 99.97% . Architectural Evolution: From Monolith to Microservices Architectural Evolution: From Monolith to Microservices At the beginning of the project, I opted for a monolithic Clean Architecture to leverage its advantages in rapid development and ease of testing. However, every architectural decision was made strategically to allow for a seamless transition to microservices in the future. Key Architectural Decisions: Domain-Driven Design (DDD): To model complex business logic within clear and understandable bounded contexts. CQRS (Command Query Responsibility Segregation): To separate write (Command) and read (Query) operations, optimizing each according to its needs. Event-Driven Approach: To achieve loose coupling between services, increasing the system’s flexibility and resilience. CI/CD and Deployment Local Development Environment with Docker Compose: API Gateway & Services PostgreSQL (Write database) Elasticsearch (Read/Search database) Redis (Cache) RabbitMQ (Message Broker) Monitoring Stack (Prometheus, Grafana) Automation with GitHub Actions: The CI/CD pipeline set up with GitHub Actions followed these steps: Code Push → Automated Tests → Security Scans → Docker Image Build → Deploy to Staging → Deploy to Production after Manual Approval. Results: Average Build Time: 3.2 minutes Weekly Deployments: 15+ Code Coverage: 85% Performance Optimization Database Indexing: Achieved up to a 75% reduction in query times with proper indexing strategies. Connection Pooling: Reached over 90% effective utilization with database connection pooling. Multi-Layer Caching: Attained a 92% hit ratio and a 60% reduction in database load using Redis and In-Memory Cache. Technical and Personal Lessons Learned Observability is not a luxury; it’s a foundation that must be established from day one of the project. While initially complex, an event-driven architecture provides significant long-term gains in flexibility and scalability. Comprehensive performance and load testing before going live is the most effective way to identify potential bottlenecks early. Clean Architecture enhances the testability and maintainability of the code, extending the project’s lifespan. Tech Stack .NET 9, C# 12, PostgreSQL, Elasticsearch, Redis, RabbitMQ, JWT & Identity, Serilog, FluentValidation, Docker, GitHub Actions, Prometheus, Grafana, AWS S3 The key to success lies in balancing technical excellence with business value, always keeping the user stories and real-world impact at the center of every architectural decision. Source Code and Details: You can access the project’s source code and more technical details on the GitHub repository: github.com/Yemresalcan/E-commerceAPI
- Published on
. Geliştirme: Sıfırdan Kurumsal Seviyede İzlemeye
.NET 9 ile Üretim Ortamına Hazır E-Ticaret API’si Geliştirme: Sıfırdan Kurumsal Seviyede İzlemeye Modern yazılım mimarisi, mikroservis desenleri ve kurumsal seviyede izleme üzerine kişisel bir mühendislik yolculuğu Giriş: Sıfır Noktasından İlk Satıra Bir yazılım mühendisi olarak en keyif aldığım anlar, bir fikri sıfırdan hayata geçirdiğim anlardır. Bu proje de tam olarak bu tutkuyla doğdu. Amacım, .NET 9’un sunduğu yenilikleri ve performans potansiyelini, yüksek trafikli ve gerçekçi bir senaryo üzerinden test etmekti: üretim ortamına hazır, ölçeklenebilir ve kurumsal seviyede izlenebilir bir e-ticaret API’si geliştirmek. .NET 9’u uzun zamandır merak ediyordum. Hem yeni özelliklerini deneyimlemek hem de yüksek trafikli bir senaryoda performansını ölçmek için bu projeyi bir fırsat olarak gördüm. Yolculuğa çıkarken kendime net hedefler koydum: Saniyede 10.000+ isteği işleyebilen bir sistem kurmak Yatay ölçeklenebilir bir mimari tasarlamak %99,9 uptime seviyesini yakalamak Tam gözlemlenebilirlik ( monitoring, logging, tracing ) sağlamak Clean Architecture, CQRS ve Event Sourcing gibi modern desenleri uygulamak Bu hedefler, başlangıçta iddialı bir “teknoloji rüyası” gibi görünse de, projenin her adımı ciddi bir mühendislik meydan okumasına dönüştü. Epic 1: Müşteri Deneyimi User Story 1 — Ürün Keşfi “Bir müşteri olarak, ürünleri hızlıca arayıp, zaman kaybetmeden aradığımı bulmak istiyorum.” Teknik Kararlar: Elasticsearch ile milisaniyeler içinde arama performansı. Redis ile sık kullanılan arama sonuçları için önbellekleme (caching). Otomatik tamamlama (autocomplete) ve gerçek zamanlı fasetli filtreleme ile kullanıcı deneyimini zenginleştirme. Bu hedefe ulaşmak için Redis ile önbelleğe alınmış ve Elasticsearch ile güçlendirilmiş bir arama altyapısı kurdum var cached = await _cacheService.GetAsync (cacheKey); if (cached != null) return cached; var searchResponse = await _elasticClient.SearchAsync (s => s .Index("products") .Query(q => BuildOptimizedQuery(q, request)) .Aggregations(a => BuildFacetAggregations()) .Highlight(h => h.Fields(f => f.Field(p => p.Name))) ); var result = MapToSearchResult(searchResponse); await _cacheService.SetAsync(cacheKey, result, TimeSpan.FromMinutes(15)); return result; Sonuç: Bu yapı sayesinde ortalama arama süresi 45 milisaniyeye düşerken, cache isabet oranı %85 seviyesine ulaştı. User Story 2 — Sorunsuz Sipariş “Bir müşteri olarak, siparişimi gecikmeden ve hatasız bir şekilde tamamlamak istiyorum.” Teknik Kararlar: Event-driven (Olay Güdümlü) sipariş işleme akışı. Gerçek zamanlı stok yönetimi ile stok tutarlılığı. İyimser Eşzamanlılık Kontrolü (Optimistic Concurrency Control) ile veri bütünlüğünün korunması. Stok tutarlılığını sağlamak için iyimser eşzamanlılık kontrolü uygulandı ve stok güncellemeleri bir event aracılığıyla yayınlandı: if (product.StockQuantity Sonuç: Sıfır stok fazlası satış (overselling) ve %99,9 oranında başarılı sipariş tamamlama. Epic 2: İşletme Operasyonları User Story 3 — Stok Yönetimi “Bir mağaza yöneticisi olarak, stokları anlık takip etmek istiyorum ki stok fazlası satışların (overselling) önüne geçebileyim.” Teknik Kararlar: Event Sourcing ile tüm stok hareketlerinin değişmez bir kaydını tutma. RabbitMQ üzerinden olay tabanlı (event-based) gerçek zamanlı senkronizasyon. Kritik stok seviyeleri için otomatik yeniden sipariş bildirimleri. Her stok hareketi için denetim kaydı (audit trail) oluşturma. Stok güncellemelerini işleyen event handler’a bir örnek: public async Task Handle(ProductStockUpdatedEvent evt, CancellationToken ct) { var inventory = await _inventoryRepository.GetByProductIdAsync(evt.ProductId, ct); inventory.UpdateStock(evt.NewStock); await _inventoryRepository.SaveAsync(inventory, ct); } Sonuç: Bu yaklaşım sayesinde stok durumu tüm sistemde anlık olarak senkronize edilirken, her değişiklik için denetim kaydı oluşturuldu. User Story 4 — Performans İzleme “Bir DevOps mühendisi olarak, sistem sağlığını ve performansını gerçek zamanlı izleyerek olası sorunlara anında müdahale etmek istiyorum.” Teknik Yapı: Prometheus (metrik toplama), Grafana (görselleştirme) ve AlertManager (uyarı mekanizması) üçlüsü kullanıldı. İzlenen metrikler ikiye ayrıldı: İş Metrikleri: Sipariş hızı, anlık gelir, müşteri dönüşüm oranı vb. Teknik Metrikler: CPU/bellek kullanımı, ağ trafiği, veritabanı sorgu gecikmesi, API hata oranları vb. Elde Edilen Sonuçlar: ⚙️ MTTR (Ortalama Onarım Süresi): 45 dakikadan 3 dakikaya indi. 📈 Uptime (Erişilebilirlik): %99,97 seviyesine ulaştı. Mimari Evrim: Monolitten Mikroservise Giden Yol Projenin başlangıcında, hızlı geliştirme ve kolay test edilebilirlik avantajları nedeniyle monolitik bir Clean Architecture yapısını tercih ettim. Ancak mimarideki her karar, gelecekte mikroservislere sorunsuz bir geçişi mümkün kılacak şekilde stratejik olarak alındı. Başlıca Mimari Kararlar: Domain-Driven Design (DDD): Karmaşık iş mantığını net ve anlaşılır sınırlar (bounded context) içinde modellemek. CQRS (Command Query Responsibility Segregation): Yazma (Command) ve okuma (Query) operasyonlarını ayırarak her ikisini de kendi ihtiyaçlarına göre optimize etmek. Event-Driven Yaklaşım: Servisler arası gevşek bağlılığı (loose coupling) sağlayarak sistemin esnekliğini ve dayanıklılığını artırmak CI/CD ve Dağıtım Docker Compose ile Yerel Geliştirme Ortamı: API Gateway & Servisler PostgreSQL (Yazma veritabanı) Elasticsearch (Okuma/Arama veritabanı) Redis (Cache) RabbitMQ (Message Broker) Monitoring Stack (Prometheus, Grafana) GitHub Actions ile Otomasyon: Kurulan CI/CD pipeline’ı şu adımları izledi: Kodun gönderilmesi → Otomatik Testler → Güvenlik Taramaları → Docker Image Oluşturma → Staging Ortamına Dağıtım → Manuel Onay Sonrası Üretim Ortamına Dağıtım. Sonuçlar: Ortalama Build Süresi: 3,2 dakika Haftalık Dağıtım Sayısı: 15+ Test Kapsamı (Code Coverage): %85 Performans Optimizasyonu Veritabanı İndeksleme: Doğru indeksleme stratejileriyle sorgu sürelerinde %75'e varan düşüş sağlandı. Bağlantı Havuzu (Connection Pooling): Veritabanı bağlantı havuzu ile %90'ın üzerinde etkin kullanım elde edildi. Çok Katmanlı Önbellekleme (Multi-Layer Caching): Redis ve In-Memory Cache kullanımıyla %92 isabet oranı ve veritabanı yükünde %60 azalma sağlandı. Teknik ve İnsanî Dersler Gözlemlenebilirlik (Observability) bir lüks değil, projenin ilk gününden itibaren kurulması gereken bir temeldir. Event-driven mimari , başlangıçtaki karmaşıklığına rağmen uzun vadede esneklik ve ölçeklenebilirlik açısından büyük kazançlar sağlar. Uygulama canlıya alınmadan önce yapılan kapsamlı performans ve yük testleri , olası darboğazları erkenden tespit etmenin en etkili yoludur. Clean Architecture , kodun test edilebilirliğini ve sürdürülebilirliğini artırarak projenin ömrünü uzatır. 📚 Kullanılan Teknolojiler .NET 9, C# 12, PostgreSQL, Elasticsearch, Redis, RabbitMQ, JWT & Identity, Serilog, FluentValidation, Docker, GitHub Actions, Prometheus, Grafana, AWS S3. Kaynak Kod ve Detaylar: Projenin kaynak kodlarına ve daha fazla teknik detaya GitHub deposu üzerinden ulaşabilirsiniz: Kaynak kod ve detaylar: Yemresalcan/E‑commerceAPI GitHub github.com+1
- Published on
Deneyim
VulnHero
(Siber Güvenlik Platformu)Mevcut İşverenSoftware Engineer (Full-Stack)
- Employment Type
- Tam zamanlı
- Location
- London, UK (Remote)
- Employment Period
- 09.2025-Devam Ediyor
Gerçek zamanlı zafiyet istihbaratıyla çalışan yeni nesil attack surface management ve offensive security platformu geliştiriyorum. LLM destekli raporlama ve yüksek eşzamanlı API'lerle analist yükünü azaltıp büyük ölçekli güvenlik verisini işliyorum.
- Next
- Node
- Python
- Docker
- LLMs
- Security
Wagner Kablo
(Otomotiv Sektörü)Software Engineer (Full-Stack)
- Employment Type
- Tam zamanlı
- Location
- Antalya, Turkey (On-site)
- Employment Period
- 03.2024-02.2025
Üretim operasyonları için Angular, C#, Azure ve SQL Server ile MES ve üretim görünürlük sistemleri tasarladım. IoT izleme, CI/CD otomasyonu ve embedded ile web ortamlarında backend performans iyileştirmeleri teslim ettim.
- Angular
- C#
- Azure
- SQL
- Pi
- DevOps
E-Commerce Solutions
(Freelance)Mevcut İşverenJr. Software Engineer
- Employment Type
- Freelance
- Location
- Antalya, Turkey (Remote)
- Employment Period
- 09.2019-Devam Ediyor
ikas ve Ticimax projeleri için JavaScript ve Liquid ile özel storefront'lar ve RESTful commerce entegrasyonları geliştirdim. Ödeme geçidi entegrasyonları ve gerçek zamanlı stok davranışına odaklanan responsive sepet akışları çıkardım.
Örnek Siteler
- JS
- Liquid
- API
- Stripe
- PayTR
- AJAX
Wagner Kablo
(Otomotiv Sektörü)Software Engineer (Intern)
- Employment Type
- Staj
- Location
- Antalya, Turkey (On-site)
- Employment Period
- 06.2022-10.2022
Unit ve integration testing pratikleriyle SQL entegrasyonlu AngularJS uygulamaları geliştirdim. Gerçek zamanlı veri toplama, izleme ve temiz CRUD mimarileri için Raspberry Pi ve Linux tabanlı IoT çözümleri kurdum.
- AngularJS
- SQL
- Linux
- Pi
- Tests
- Int
Projeler(6)
Üretim koşulları düşünülerek tasarlanmış; ölçek, gözlemlenebilirlik ve sürdürülebilir servis sınırları odaklı e-ticaret backend'i.
- Mimari: Clean Architecture, CQRS, async messaging, cache, search ve container tabanlı altyapı
- Çıktı: Gerçek üretim ortamında yük altında debug edilebilir ve evrilebilir API'ler nasıl tasarladığımı gösterir
- .NET 9
- Clean Architecture
- CQRS
- PostgreSQL
- Redis
- RabbitMQ
- Elasticsearch
- Docker
- OpenTelemetry
Siber güvenlik, API, veritabanı ve AI odaklı developer-first ürünler geliştiriyorum.





