How I Approach Modern Web Dev

August 11, 2026 Melalew Mengistu

I taught myself frontend development the hard way. YouTube tutorials, W3Schools reference pages, and broken code at 2 AM. When DeepSeek dropped, everyone around me panicked. "Developers are finished," they said. I watched the hype cycle spin up and then die down, and I realized the same thing I always do: tools change, but understanding doesn't. Then I tried Z AI — just once — and it was so good it actually scared me. I thought it was built only for senior engineers. That moment pushed me to stop writing lazy prompts and start thinking like an engineer again. Through trial and error, I learned prompt engineering before it had a name. And that changed everything.

What This Guide Actually Covers

This isn't a rant against AI. I use it daily. This is about the difference between using AI to amplify your skills and using it to replace your knowledge — and why the second path collapses the moment something goes wrong.

What Vibe Coding Actually Is

Vibe coding is the practice of describing what you want in natural language, letting an AI generate the implementation, and iterating through conversation until the result feels right. No syntax memorization. No documentation diving. Just intent and refinement. I built an entire production-ready website this way without manually writing a single line. It looked professional. It deployed cleanly. And I had no idea how any of it worked under the hood.

When DeepSeek hit the scene, people treated it like an extinction event for junior developers. It wasn't. It was just better at pattern matching than ChatGPT at the time. Then there was Z AI — powerful, precise, and barely discussed in the mainstream. I used it once for a complex refactoring task and the output was so clean I assumed I wasn't qualified to review it. That was my first warning sign. If the tool makes you feel obsolete, you're probably using it wrong.

The Hype vs. The Reality

AI makes starting easier. It lowers the barrier to entry. But it also lowers the barrier to shipping dangerous code. I watched beginners vibe-code authentication systems, payment flows, and admin panels without understanding session management, SQL injection, or CSRF protection. The code runs. The demo looks great. The security model is nonexistent.

Where It Falls Apart

The problem isn't the tool. It's the gap between "it works" and "I know why it works."

Frontend vs. Backend

Frontend is forgiving. You can vibe-code a React component, break the layout, and fix it by asking the AI again. The cost of failure is a misaligned div. Backend is not forgiving. A vibe-coded authentication flow might look correct, but if the AI used a deprecated hashing algorithm, missed rate limiting, or stored tokens in localStorage instead of httpOnly cookies, you won't know until someone exploits it.

I learned this when I asked an AI to build a file upload handler. It wrote the code in seconds. It also accepted any file extension, didn't validate MIME types, and placed uploads in a web-accessible directory. If I had shipped that, I would have handed attackers a shell upload vector. I only caught it because I knew what to look for.

The Security Blind Spot

Cybersecurity professionals face the same trap. I considered automating my Python recon scripts with AI. But then I asked: what if the model imports a malicious package disguised as a helper library? What if it adds a subtle network callback that exfiltrates scan results? AI doesn't intentionally backdoor your code, but it confidently hallucinates. And confidence in the wrong place is a vulnerability.

When you vibe-code, you lose the ability to trace intent. If an attack happens at 3 AM and your application is down, you can't ask an AI to "just fix it" if you don't understand the architecture. You'll be staring at complex generated code you didn't write, under pressure, with no mental model of how the pieces connect. That's not a coding problem. That's a business continuity problem.

Vibe coding a backend you don't understand is not development. It's delegation to an intern who types fast, never sleeps, and occasionally adds a backdoor because it looked like a valid pattern in the training data.

How I Actually Use AI Now

I stopped treating AI like a replacement and started treating it like a senior pair programmer who types fast but sometimes lies. My workflow changed completely.

Prompt Engineering by Necessity

I don't write "build me a login form" anymore. I write: "Build a login form in PHP 8.2 using PDO prepared statements, CSRF tokens, bcrypt via password_hash(), rate limiting with Redis, and httpOnly session cookies. Do not use md5, sha1, or client-side storage for credentials." The output is dramatically different because I defined the guardrails.

I learned this by failing. Early prompts gave me garbage. I would paste errors, ask for fixes, and copy-paste whatever came out. The code worked until it didn't. Over a year, I realized the quality of the output was directly tied to the quality of my input. Prompt engineering isn't a separate skill. It's just knowing what you actually need and being specific enough to enforce it.

The Audit I Run on Every Output

Every line of AI-generated code gets reviewed before it ships. I check for:

  • Hardcoded credentials or API keys
  • eval(), exec(), or system() calls
  • Unvalidated file uploads or path traversal risks
  • Unnecessary dependencies with no clear purpose
  • Inline event handlers or innerHTML that could carry XSS
  • Deprecated functions or weak cryptographic algorithms

I also run dependency audits on any package the AI suggests. I treat AI output like code from an unknown freelancer: functional, maybe clever, but absolutely untrusted until proven otherwise.

For my own tools, I use Cursor and Claude to accelerate boilerplate and refactor repetitive logic. But I design the architecture. I own the security model. I choose the database schema. The AI fills gaps, it doesn't make decisions.

Production Checklist

AI-assisted development is here to stay, but these four rules keep me from shipping disasters:

  • Never vibe-code anything you can't debug by hand; if you don't understand the logic, you don't ship it
  • Audit every AI-generated dependency and function call for unnecessary permissions, deprecated APIs, and suspicious imports before it touches your repo
  • Use AI as a coding accelerator, not an architecture designer — own the security model, database design, and authentication flow yourself
  • If you automate security tools with AI, run the generated code in an isolated environment first and review it line by line before it touches production data

AI didn't replace developers. It separated the ones who understand the craft from the ones who only know how to ask. I still use YouTube and W3Schools when I need to understand a concept deeply. The AI just gets me to the interesting part faster. But when the server is on fire at midnight, the prompt won't save you. Only your understanding will.

Melalew Mengistu

Melalew Mengistu

Web engineer and web security specialist. Helps teams build and ship secure applications.