Back to list
ProfPowell

fake-content

by ProfPowell

A layered HTML component system. Build with native HTML elements, enhance progressively with CSS custom elements and JavaScript web components.

0🍴 0📅 Jan 25, 2026

SKILL.md


name: fake-content description: Generate realistic fake content for HTML prototypes. Use when populating pages with sample text, products, testimonials, or other content. NOT generic lorem ipsum. allowed-tools: Read, Write, Edit, Bash

Fake Content Skill

Generate realistic fake content using @faker-js/faker. Create contextually appropriate sample data for prototypes and development.

Philosophy

  • Realistic over generic - Use proper names, realistic prices, believable text
  • Contextually appropriate - Match content to the page purpose
  • Consistent within context - Same person name throughout a section
  • Locale-aware - Match content to page language

Setup

Install faker as a dev dependency:

npm install @faker-js/faker --save-dev

Content Types

Person

Generate realistic user data:

import { faker } from '@faker-js/faker';

const person = {
  name: faker.person.fullName(),
  email: faker.internet.email(),
  phone: faker.phone.number(),
  jobTitle: faker.person.jobTitle(),
  avatar: faker.image.avatar(),
  bio: faker.person.bio()
};

HTML Template:

<article class="team-member">
  <img src="[avatar URL]" alt="[name]"/>
  <h3>[name]</h3>
  <p class="title">[jobTitle]</p>
  <p class="bio">[bio]</p>
  <a href="mailto:[email]">[email]</a>
</article>

Product

Generate e-commerce product data:

import { faker } from '@faker-js/faker';

const product = {
  name: faker.commerce.productName(),
  description: faker.commerce.productDescription(),
  price: faker.commerce.price({ min: 10, max: 500, dec: 2 }),
  category: faker.commerce.department(),
  sku: faker.string.alphanumeric(8).toUpperCase(),
  rating: faker.number.float({ min: 3.5, max: 5, fractionDigits: 1 }),
  reviews: faker.number.int({ min: 10, max: 500 })
};

HTML Template:

<product-card sku="[sku]">
  <img src="/assets/images/placeholder/product-400x400.svg"
       alt="[name]"/>
  <h3>[name]</h3>
  <p>[description]</p>
  <data class="price" value="[price]">$[price]</data>
  <p class="category">[category]</p>
  <p class="rating">[rating] stars ([reviews] reviews)</p>
</product-card>

Testimonial

Generate customer testimonials:

import { faker } from '@faker-js/faker';

const testimonial = {
  quote: faker.lorem.sentences({ min: 2, max: 4 }),
  author: faker.person.fullName(),
  company: faker.company.name(),
  role: faker.person.jobTitle(),
  avatar: faker.image.avatar()
};

HTML Template:

<blockquote class="testimonial">
  <p>"[quote]"</p>
  <footer>
    <img src="[avatar]" alt="[author]"/>
    <cite>[author]</cite>
    <span class="role">[role], [company]</span>
  </footer>
</blockquote>

Article

Generate blog posts and news articles:

import { faker } from '@faker-js/faker';

const article = {
  title: faker.lorem.sentence({ min: 5, max: 10 }),
  author: faker.person.fullName(),
  date: faker.date.recent({ days: 30 }),
  excerpt: faker.lorem.sentences(2),
  body: faker.lorem.paragraphs(5),
  category: faker.helpers.arrayElement(['Technology', 'Business', 'Lifestyle', 'Health']),
  readTime: faker.number.int({ min: 3, max: 15 })
};

HTML Template:

<article class="blog-post">
  <header>
    <h2>[title]</h2>
    <p class="meta">
      By <span class="author">[author]</span> |
      <time datetime="[date ISO]">[date formatted]</time> |
      [readTime] min read
    </p>
  </header>
  <img src="/assets/images/placeholder/card-400x225.svg"
       alt="Article illustration"/>
  <p class="excerpt">[excerpt]</p>
  <div class="content">[body as paragraphs]</div>
</article>

Company

Generate business/organization data:

import { faker } from '@faker-js/faker';

const company = {
  name: faker.company.name(),
  catchPhrase: faker.company.catchPhrase(),
  buzzPhrase: faker.company.buzzPhrase(),
  industry: faker.company.buzzNoun(),
  phone: faker.phone.number(),
  email: faker.internet.email({ provider: 'company.com' }),
  website: faker.internet.url(),
  address: {
    street: faker.location.streetAddress(),
    city: faker.location.city(),
    state: faker.location.state({ abbreviated: true }),
    zip: faker.location.zipCode(),
    country: faker.location.country()
  }
};

HTML Template:

<div class="company-info">
  <h3>[name]</h3>
  <p class="tagline">[catchPhrase]</p>
  <address>
    [street]<br/>
    [city], [state] [zip]<br/>
    [country]
  </address>
  <p>
    <a href="tel:[phone]">[phone]</a><br/>
    <a href="mailto:[email]">[email]</a><br/>
    <a href="[website]">[website]</a>
  </p>
</div>

Event

Generate event/calendar data:

import { faker } from '@faker-js/faker';

const event = {
  title: faker.lorem.sentence({ min: 3, max: 7 }),
  description: faker.lorem.paragraph(),
  date: faker.date.future({ years: 1 }),
  startTime: faker.date.future(),
  endTime: faker.date.future(),
  location: {
    venue: faker.company.name(),
    address: faker.location.streetAddress(),
    city: faker.location.city()
  },
  organizer: faker.person.fullName(),
  price: faker.commerce.price({ min: 0, max: 200 }),
  capacity: faker.number.int({ min: 20, max: 500 })
};

HTML Template:

<article class="event-card">
  <time datetime="[date ISO]">
    <span class="month">[month]</span>
    <span class="day">[day]</span>
  </time>
  <div class="details">
    <h3>[title]</h3>
    <p>[description]</p>
    <p class="location">[venue], [city]</p>
    <p class="time">[startTime] - [endTime]</p>
    <data class="price" value="[price]">$[price]</data>
  </div>
</article>

FAQ

Generate question/answer pairs:

import { faker } from '@faker-js/faker';

const faq = {
  question: faker.lorem.sentence().replace('.', '?'),
  answer: faker.lorem.sentences({ min: 2, max: 4 })
};

// Generate multiple FAQs
const faqs = faker.helpers.multiple(
  () => ({
    question: faker.lorem.sentence().replace('.', '?'),
    answer: faker.lorem.sentences({ min: 2, max: 4 })
  }),
  { count: 8 }
);

HTML Template:

<details class="faq-item">
  <summary>[question]</summary>
  <p>[answer]</p>
</details>

Locale Support

Faker supports 70+ locales. Match content to your page's language:

// Import locale-specific faker
import { fakerDE } from '@faker-js/faker';  // German
import { fakerFR } from '@faker-js/faker';  // French
import { fakerES } from '@faker-js/faker';  // Spanish
import { fakerJA } from '@faker-js/faker';  // Japanese

// Use locale-specific instance
const germanPerson = {
  name: fakerDE.person.fullName(),    // "Max Müller"
  city: fakerDE.location.city(),       // "München"
  phone: fakerDE.phone.number()        // "+49 30 12345678"
};

Common Locales:

CodeLanguageImport
deGermanfakerDE
frFrenchfakerFR
esSpanishfakerES
itItalianfakerIT
pt_BRPortuguese (Brazil)fakerPT_BR
jaJapanesefakerJA
zh_CNChinese (Simplified)fakerZH_CN
koKoreanfakerKO
arArabicfakerAR
nlDutchfakerNL

Detect Page Language:

// Get lang from HTML
const lang = document.documentElement.lang || 'en';

// Map to faker locale
const fakerLocales = {
  'en': faker,
  'de': fakerDE,
  'fr': fakerFR,
  'es': fakerES
};

const localFaker = fakerLocales[lang] || faker;

Content Guidelines

Text Length

Content TypeRecommended Length
Product name2-5 words
Product description15-30 words
Testimonial20-50 words
Bio15-25 words
Headline5-10 words
Article excerpt20-40 words
Article body5-10 paragraphs
FAQ question8-15 words
FAQ answer30-60 words
Event description20-40 words
Company tagline5-10 words

Realistic Proportions

// Good: Realistic price range
faker.commerce.price({ min: 19.99, max: 299.99 })

// Good: Realistic rating
faker.number.float({ min: 3.5, max: 5, fractionDigits: 1 })

// Good: Varying review counts
faker.number.int({ min: 5, max: 500 })

Consistency

Keep related data consistent within a section:

// Generate person once, reuse data
const author = {
  firstName: faker.person.firstName(),
  lastName: faker.person.lastName()
};

// Use consistently
const fullName = `${author.firstName} ${author.lastName}`;
const email = faker.internet.email({
  firstName: author.firstName,
  lastName: author.lastName
});

Seeding for Reproducibility

Use seeds to generate consistent data across runs:

import { faker } from '@faker-js/faker';

// Set seed for reproducible results
faker.seed(12345);

// Same seed = same output every time
const name = faker.person.fullName(); // Always "John Smith"

Generate Multiple Items

import { faker } from '@faker-js/faker';

// Generate array of products
const products = faker.helpers.multiple(
  () => ({
    name: faker.commerce.productName(),
    price: faker.commerce.price(),
    description: faker.commerce.productDescription()
  }),
  { count: 10 }
);

// Generate with index
const items = faker.helpers.multiple(
  (_, index) => ({
    id: index + 1,
    name: faker.commerce.productName()
  }),
  { count: 5 }
);

Quick Reference

NeedFaker Method
Full namefaker.person.fullName()
First namefaker.person.firstName()
Emailfaker.internet.email()
Phonefaker.phone.number()
Job titlefaker.person.jobTitle()
Companyfaker.company.name()
Catchphrasefaker.company.catchPhrase()
Product namefaker.commerce.productName()
Pricefaker.commerce.price()
Departmentfaker.commerce.department()
Descriptionfaker.commerce.productDescription()
Paragraphfaker.lorem.paragraph()
Paragraphsfaker.lorem.paragraphs(5)
Sentencesfaker.lorem.sentences(3)
Recent datefaker.date.recent()
Future datefaker.date.future()
Street addressfaker.location.streetAddress()
Cityfaker.location.city()
Countryfaker.location.country()
UUIDfaker.string.uuid()
URLfaker.internet.url()
Avatar URLfaker.image.avatar()
Random from arrayfaker.helpers.arrayElement([...])
Multiple itemsfaker.helpers.multiple(fn, { count })

Checklist

When generating fake content:

  • Use faker methods, not lorem ipsum
  • Match content length to context
  • Keep related data consistent
  • Use realistic value ranges
  • Consider using seed for reproducibility
  • Generate appropriate count for the UI
  • content-author - Write quality content for HTML documents
  • patterns - Reusable HTML page patterns and component blocks
  • xhtml-author - Write valid XHTML-strict HTML5 markup
  • placeholder-images - Generate SVG placeholder images for prototypes

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon