| name | awesome-design-md-jp |
| description | Generate accurate Japanese UI with proper CJK typography using DESIGN.md specifications for 186+ Japanese web services |
| triggers | ["use Japanese design system","apply Japanese typography rules","create Japanese UI with proper fonts","implement CJK typographic standards","generate Japanese web interface","follow Japanese design guidelines","add Japanese font fallback chain","use DESIGN.md for Japanese site"] |
Awesome Design MD JP Skill
Skill by ara.so — Design Skills collection.
What This Project Does
Awesome Design MD JP is a curated collection of DESIGN.md files for 186+ Japanese web services, enabling AI agents to generate accurate Japanese UI with proper CJK typography. It extends the Google Stitch DESIGN.md format with Japanese-specific typographic rules including font stacks, line-height, letter-spacing, OpenType features, and kinsoku shori (禁則処理).
Unlike Western DESIGN.md collections, this addresses fundamental differences in Japanese typography:
- Japanese font fallback chains (和文 → 欧文 → generic)
- Wider line-height (1.5-2.0 vs 1.4-1.5 for Latin)
- Letter-spacing for body text (0.04-0.1em)
- Kinsoku shori (禁則処理) for punctuation placement
- OpenType features (
palt, kern) for proportional typesetting
- Mixed script composition rules (和文 + 欧文)
Installation
Clone the repository:
git clone https://github.com/kzhrknt/awesome-design-md-jp.git
cd awesome-design-md-jp
No build step required — all DESIGN.md files are ready to use.
Repository Structure
awesome-design-md-jp/
├── design-md/
│ ├── apple/
│ │ ├── DESIGN.md
│ │ ├── preview.html
│ │ └── preview-screenshot.png
│ ├── muji/
│ ├── mercari/
│ ├── studio/
│ └── [186+ other services]/
├── gallery.html # Visual gallery of all designs
└── README.md
Using DESIGN.md Files
1. Copy to Your Project
Copy the relevant DESIGN.md to your project root:
cp design-md/muji/DESIGN.md ./DESIGN.md
2. Reference in AI Agent Context
Add to your AI agent's context (.cursorrules, .clinerules, etc.):
Follow the design specifications in DESIGN.md for all UI implementation.
Pay special attention to Japanese typography rules in the Typography section.
3. Direct Integration
Import design tokens programmatically:
import fs from 'fs';
import path from 'path';
function parseDesignMd(filePath) {
const content = fs.readFileSync(filePath, 'utf-8');
const tokens = {
colors: {},
typography: {},
spacing: {}
};
const colorMatch = content.match(/### Color Palette\n\n```css\n([\s\S]*?)```/);
if (colorMatch) {
const colorLines = colorMatch[1].split('\n');
colorLines.forEach(line => {
const match = line.match(/--([^:]+):\s*([^;]+);/);
if (match) {
tokens.colors[match[1]] = match[2].trim();
}
});
}
return tokens;
}
const tokens = parseDesignMd('./DESIGN.md');
console.log(tokens.colors);
Japanese Typography Patterns
Font Stack Implementation
body {
font-family:
"Hiragino Kaku Gothic ProN",
"Hiragino Sans",
"Yu Gothic Medium",
"Meiryo",
"Noto Sans JP",
sans-serif;
}
.body-text {
font-family:
"Hiragino Kaku Gothic ProN",
"Helvetica Neue",
Arial,
"Noto Sans JP",
sans-serif;
}
Line Height for Japanese
.ja-body {
line-height: 1.8;
}
.ja-heading {
line-height: 1.6;
}
.ja-caption {
line-height: 1.7;
}
Letter Spacing
.ja-body {
letter-spacing: 0.05em;
}
.ja-heading {
letter-spacing: 0.08em;
}
.en-text {
letter-spacing: 0;
}
OpenType Features
.ja-text {
font-feature-settings:
"palt" 1,
"kern" 1;
}
.vertical-text {
writing-mode: vertical-rl;
font-feature-settings:
"vpal" 1,
"vkrn" 1;
}
Kinsoku Shori (禁則処理)
.ja-text {
word-break: normal;
overflow-wrap: break-word;
line-break: strict;
}
.ja-paragraph {
orphans: 2;
widows: 2;
}
Common Implementation Patterns
Pattern 1: Apply Complete DESIGN.md System
:root {
--primary: #000000;
--background: #ffffff;
--text: #333333;
--border: #e0e0e0;
--font-ja: "Hiragino Kaku Gothic ProN", "Yu Gothic Medium", "Noto Sans JP", sans-serif;
--font-en: "Helvetica Neue", Arial, sans-serif;
--space-xs: 4px;
--space-sm: 8px;
--space-md: 16px;
--space-lg: 24px;
--space-xl: 32px;
}
body {
font-family: var(--font-ja);
line-height: 1.8;
letter-spacing: 0.05em;
color: var(--text);
background: var(--background);
}
h1, h2, h3 {
line-height: 1.6;
letter-spacing: 0.08em;
}
Pattern 2: Mix Japanese and English Typography
<style>
.mixed-content {
font-family: "Hiragino Kaku Gothic ProN", "Helvetica Neue", sans-serif;
}
.mixed-content:lang(ja) {
line-height: 1.8;
letter-spacing: 0.05em;
}
.mixed-content:lang(en) {
line-height: 1.5;
letter-spacing: 0;
}
</style>
<div class="mixed-content">
<p lang="ja">これは日本語のテキストです。</p>
<p lang="en">This is English text.</p>
</div>
Pattern 3: Responsive Japanese Typography
.ja-heading {
font-size: 1.5rem;
line-height: 1.6;
letter-spacing: 0.08em;
}
@media (min-width: 768px) {
.ja-heading {
font-size: 2rem;
line-height: 1.5;
letter-spacing: 0.1em;
}
}
@media (min-width: 1024px) {
.ja-heading {
font-size: 2.5rem;
line-height: 1.4;
}
}
Pattern 4: Component with DESIGN.md Tokens
import React from 'react';
import designTokens from './design-tokens.json';
const JapaneseCard = ({ title, description }) => {
const styles = {
card: {
backgroundColor: designTokens.colors.background,
border: `1px solid ${designTokens.colors.border}`,
borderRadius: designTokens.radii.md,
padding: designTokens.spacing.lg,
},
title: {
fontFamily: designTokens.typography.fontFamily.japanese,
fontSize: designTokens.typography.fontSize.h3,
lineHeight: designTokens.typography.lineHeight.heading,
letterSpacing: designTokens.typography.letterSpacing.heading,
color: designTokens.colors.text,
marginBottom: designTokens.spacing.md,
},
description: {
fontFamily: designTokens...,
: designTokens...,
: designTokens...,
: designTokens...,
: designTokens..,
},
};
(
);
};
;
Pattern 5: CSS-in-JS with Japanese Typography
import styled from 'styled-components';
const JapaneseText = styled.p`
font-family: "Hiragino Kaku Gothic ProN", "Yu Gothic Medium", "Noto Sans JP", sans-serif;
line-height: 1.8;
letter-spacing: 0.05em;
font-feature-settings: "palt" 1, "kern" 1;
word-break: normal;
overflow-wrap: break-word;
line-break: strict;
`;
const JapaneseHeading = styled.h2`
font-family: "Hiragino Kaku Gothic ProN", "Yu Gothic Medium", "Noto Sans JP", sans-serif;
font-size: 2rem;
line-height: 1.6;
letter-spacing: 0.08em;
font-weight: 600;
font-feature-settings: "palt" 1, "kern" 1;
`;
const App = () => (
<div>
<JapaneseHeading>見出しテキスト</JapaneseHeading>
<JapaneseText>
本文のテキストです。適切な行間と字間が設定されています。
</JapaneseText>
</div>
);
Browsing the Collection
View Gallery
Open gallery.html in your browser or visit:
https://kzhrknt.github.io/awesome-design-md-jp/gallery.html
Preview Individual Designs
Each design includes a preview.html file:
open design-md/muji/preview.html
open design-md/apple/preview.html
Available Design Systems (186+)
Tech Companies: Apple, LINE, Mercari, SmartHR, freee, note, Cybozu, Qiita, Zenn, pixiv, connpass, Sansan, PayPay, MOSH, STORES, Wantedly
Media & Publishing: WIRED, 日経電子版, BRUTUS, Casa BRUTUS, Pen Online, POPEYE, ほぼ日
E-commerce & Retail: MUJI, UNIQLO, Rakuten, Tabelog, Cookpad, 一休.com, Snow Peak, JINS, BEAMS
Design & Creative: STUDIO, nendo, Takram, teamLab, 21_21 DESIGN SIGHT, NDC, Droga5
Automotive: Toyota, Mazda, LEXUS
Government: デジタル庁 (Digital Agency)
Traditional & Crafts: とらや, 中川政七商店, 吉田カバン, SOU・SOU, カキモリ
Luxury & Fashion: ISSEY MIYAKE, AURALEE, ミナ ペルホネン, 45R
Home & Lifestyle: 星野リゾート, BALMUDA, ±0, KINTO, IDÉE, ACTUS, Karimoku New Standard
Beauty & Cosmetics: Shiseido, POLA, OSAJI
And 140+ more…
Configuration
Create design-tokens.json
const fs = require('fs');
const path = require('path');
function extractTokens(designMdPath) {
const content = fs.readFileSync(designMdPath, 'utf-8');
const tokens = {
colors: {},
typography: {
fontFamily: {},
fontSize: {},
lineHeight: {},
letterSpacing: {}
},
spacing: {},
radii: {}
};
const cssBlocks = content.match(/```css\n([\s\S]*?)```/g) || [];
cssBlocks.forEach(block => {
const css = block.replace(/```css\n|```/g, '');
const lines = css.split('\n');
lines.forEach(line => {
const match = line.match(/--([^:]+):\s*([^;]+);/);
if (match) {
const [, key, value] = match;
if (key.startsWith('color-')) {
tokens.colors[key.(, )] = value.();
} (key.()) {
tokens..[key.(, )] = value.();
} (key.()) {
tokens..[key.(, )] = value.();
} (key.()) {
tokens..[key.(, )] = value.();
} (key.()) {
tokens..[key.(, )] = value.();
} (key.()) {
tokens.[key.(, )] = value.();
} (key.()) {
tokens.[key.(, )] = value.();
}
}
});
});
tokens;
}
tokens = ();
fs.(
,
.(tokens, , )
);
Tailwind CSS Integration
const designTokens = require('./design-tokens.json');
module.exports = {
theme: {
extend: {
colors: designTokens.colors,
fontFamily: {
ja: designTokens.typography.fontFamily.japanese?.split(',').map(f => f.trim()) || [],
en: designTokens.typography.fontFamily.english?.split(',').map(f => f.trim()) || [],
},
fontSize: designTokens.typography.fontSize,
lineHeight: designTokens.typography.lineHeight,
letterSpacing: designTokens.typography.letterSpacing,
spacing: designTokens.spacing,
borderRadius: designTokens.radii,
},
},
plugins: [],
};
Troubleshooting
Font Not Loading Properly
Problem: Japanese fonts not displaying correctly.
Solution: Ensure font fallback chain is complete and in correct order:
font-family: "Noto Sans JP", sans-serif;
font-family:
"Hiragino Kaku Gothic ProN",
"Hiragino Sans",
"Yu Gothic Medium",
"Meiryo",
"Noto Sans JP",
sans-serif;
Line Breaking Issues
Problem: Punctuation appearing at beginning of lines.
Solution: Enable proper kinsoku shori:
.ja-text {
word-break: normal;
overflow-wrap: break-word;
line-break: strict;
}
Mixed Script Spacing
Problem: English words too close to Japanese text.
Solution: Add word-spacing for mixed content:
.mixed-content {
word-spacing: 0.25em;
letter-spacing: 0.05em;
}
Web Font Loading
Problem: Flash of unstyled text (FOUT) with Japanese web fonts.
Solution: Use font-display and preload:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;700&display=swap" rel="stylesheet">
@font-face {
font-family: 'Noto Sans JP';
font-display: swap;
src: url('...') format('woff2');
}
OpenType Features Not Working
Problem: font-feature-settings not applying.
Solution: Ensure font supports the feature and use correct syntax:
.ja-text {
font-feature-settings: "palt" 1, "kern" 1;
}
.ja-text {
font-variant-ligatures: common-ligatures;
font-kerning: normal;
}
Vertical Text Issues
Problem: Vertical text not rendering correctly.
Solution: Use proper writing-mode and text-orientation:
.vertical-text {
writing-mode: vertical-rl;
text-orientation: upright;
font-feature-settings: "vpal" 1, "vkrn" 1;
}
.vertical-mixed {
writing-mode: vertical-rl;
text-orientation: mixed;
}
Best Practices
- Always include complete font fallback chains — don't rely on single web fonts
- Use appropriate line-height — 1.8+ for Japanese body text vs 1.5 for English
- Apply letter-spacing — 0.04-0.1em for Japanese body text
- Enable OpenType features —
palt and kern for better spacing
- Enforce kinsoku shori — use
line-break: strict for proper punctuation handling
- Test on multiple platforms — macOS, Windows, iOS, Android have different default fonts
- Consider web font loading — use
font-display: swap to avoid FOUT
- Separate Japanese and English styles — use
:lang() or separate classes
Resources