Useful Prompting for Frontend: 3 Levels That Actually Work

AI gives you generic code because you give it generic or over-engineered prompts. Context injection beats role prompting: better to provide specific patterns than made-up personas.

The Elaborate Prompt Syndrome

This article assumes basic familiarity with AI terminology. If you’re new to this, check out the glossary.

The deadline is near. You decide to be strategic and write a “professional” prompt:

Act as a senior frontend developer with 15 years of experience, specialized in JavaScript, TypeScript, React, Vue, with deep knowledge of software architecture, agile methodologies, team leadership, and fighting evil in the world… Please write a function to validate emails.

Result after 50 tokens of setup:

function validateEmail(email) {
  const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return re.test(email);
}

Exactly the same code you would’ve gotten with: “create function to validate emails.”

The Two Problems With Ineffective Prompting

Problem 1: Unnecessary Role Prompting

Role prompting means assigning the AI a specific persona. Useful in some contexts, counterproductive when it replaces actual technical input.

Overly elaborate role prompts make critical mistakes:

  • They waste tokens: Your context window is limited. Every “you are an expert in…” is a token not used for real examples.
  • They lack technical specificity: “15 years of experience” doesn’t say which patterns to follow or how to integrate with your stack.
  • They create false expectations: AI replies based on statistical patterns, not invented resumes.

Problem 2: Lack of Context Injection

Context injection is when you give the AI specific details about your project: patterns, conventions, and technical requirements.

Without it, you get generic code that doesn’t belong in your repo:

// Prompt: "Create email validator"
function validateEmail(email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

Problems:

  • Doesn’t follow project conventions.
  • Doesn’t handle errors the way your codebase does.
  • Doesn’t integrate with established patterns.
  • Requires manual rework.

Context Injection: The Technique That Works

Instead of fancy roles, provide concrete context:

// Prompt with context injection:
"Create an email validator following our pattern:

const validateName = (name) => ({
  isValid: name.length >= 2,
  error: name.length < 2 ? 'Name must be at least 2 characters' : null
});

It should reject temporary domains like tempmail.com."

// Integrated result:
const validateEmail = (email) => {
  const prohibitedDomains = ['tempmail.com', '10minutemail.com'];
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

  if (!email || typeof email !== 'string') {
    return {
      isValid: false,
      error: 'Email is required'
    };
  }

  if (!emailRegex.test(email)) {
    return {
      isValid: false,
      error: 'Invalid email format'
    };
  }

  const domain = email.split('@')[1]?.toLowerCase();
  if (prohibitedDomains.includes(domain)) {
    return {
      isValid: false,
      error: 'Temporary emails are not allowed'
    };
  }

  return {
    isValid: true,
    error: null
  };
};

Role vs Context: Direct Comparison

Role Prompting (Ineffective):

"You are a senior software architect experienced in distributed systems
and microservices. Create a class to handle HTTP requests."

Result: A generic class that fits nowhere.

Context Injection (Effective):

"Create an HTTP client following our pattern:

class AuthService {
  constructor(baseURL) {
    this.baseURL = baseURL;
    this.headers = { 'Content-Type': 'application/json' };
  }

  async request(endpoint, options = {}) {
    // implementation
  }
}

I need a similar ApiService with retry logic."

Result: Code that fits seamlessly into your architecture.

When to Use Each Strategy

Role prompting is useful for:

  • Creative tasks: “Act as a copywriter and improve this text.”
  • Analysis tasks: “As a code reviewer, evaluate this snippet.”
  • Perspective shifts: “From the user’s point of view, what’s missing?”.

Context injection is essential for:

  • Code generation: Anything that needs to live in your codebase.
  • Technical tasks: Functions, classes, modules that follow your patterns.
  • Consistency: When you need the output to match your ecosystem.

Types of Context Injection

Pattern Context

Show code patterns from your project:

"Create an error handler following this pattern:
try {
  const result = await operation();
  return { success: true, data: result, error: null };
} catch (err) {
  return { success: false, data: null, error: err.message };
}

Now I need something similar for user authentication."

Technical Context

Add specific constraints:

"Create a debounce function:
- Vanilla JavaScript ES2022
- No external dependencies
- Auto cleanup
- Max 15 lines"

CSS is a critical case. Generating styles without specifying methodology is one of the costliest mistakes. Here’s a real example of how to do it right.

Integration Context

Explain how it ties into your existing system:

"Create a cache module using our logger:
Logger.debug('Cache', 'Key accessed', { key });

And our config:
const ttl = Config.get('cache.ttl', 300);"

Common Mistakes

Context Overload

// Irrelevant info
"I work at a fintech startup with 50 employees. We use agile, AWS, PostgreSQL..."

// Specific, useful context
"Format currency using our pattern:
export const formatCurrency = (amount) => new Intl.NumberFormat('es-ES').format(amount);"

Role Prompts Without Purpose

// Pointless role
"You are a ninja coding rockstar, create a function..."

// Clear requirement
"Create an optimized function for 10k+ items without blocking the main thread."

The ROI of Effective Prompting

Misplaced role prompting:

  • Wasted tokens on empty setup.
  • Generic code that requires adaptation.
  • Doesn’t guarantee fit.

Context injection:

  • Tokens spent on useful detail.
  • Code that fits right away.
  • (Almost) automatic consistency.

The investment: 30 seconds of real context.
The return: Hours saved in rework.

Takeaways

  • Elaborate role prompting wastes tokens and adds no technical precision.
  • Context injection beats made-up personas every time.
  • Show patterns, don’t describe résumés.
  • 30 seconds of specific context > 3 paragraphs of fiction.
  • AI doesn’t need inspiration — it needs information.

Get only what matters

If I have nothing worth saying, you won’t hear from me. When I do, you’ll be the first to know.

Are you a professional Web developer?
No

Unsubscribe at any time.