Claude-skill-registry fake-content
Generate realistic fake content for HTML prototypes. Use when populating pages with sample text, products, testimonials, or other content. NOT generic lorem ipsum.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/fake-content" ~/.claude/skills/majiayu000-claude-skill-registry-fake-content && rm -rf "$T"
skills/data/fake-content/SKILL.mdFake 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:
| Code | Language | Import |
|---|---|---|
| German | |
| French | |
| Spanish | |
| Italian | |
| Portuguese (Brazil) | |
| Japanese | |
| Chinese (Simplified) | |
| Korean | |
| Arabic | |
| Dutch | |
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 Type | Recommended Length |
|---|---|
| Product name | 2-5 words |
| Product description | 15-30 words |
| Testimonial | 20-50 words |
| Bio | 15-25 words |
| Headline | 5-10 words |
| Article excerpt | 20-40 words |
| Article body | 5-10 paragraphs |
| FAQ question | 8-15 words |
| FAQ answer | 30-60 words |
| Event description | 20-40 words |
| Company tagline | 5-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
| Need | Faker Method |
|---|---|
| Full name | |
| First name | |
| |
| Phone | |
| Job title | |
| Company | |
| Catchphrase | |
| Product name | |
| Price | |
| Department | |
| Description | |
| Paragraph | |
| Paragraphs | |
| Sentences | |
| Recent date | |
| Future date | |
| Street address | |
| City | |
| Country | |
| UUID | |
| URL | |
| Avatar URL | |
| Random from array | |
| Multiple items | |
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
Related Skills
- 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