Sample work
Websites for private clinics
A clinic website that shows opening status and the waiting queue automatically, so patients can find their way to a visit. It comes with a tool that flags wording likely to cause problems under Japan's medical advertising guidelines while the copy is still a draft. The demo on this page is built for a fictional internal medicine and pediatrics clinic.
A fictional clinic, for demonstration only. It is not a real medical facility. The clinic name, doctor, address, phone number and queue are all fictional, and you cannot call or book.
- The problem
- A clinic's website is the first place patients look before a visit. If opening hours, closed days, how busy it is and what to bring on a first visit are hard to find, the phone keeps ringing. Clinic websites also fall under Japan's medical advertising rules, so comparisons, exaggeration and patient testimonials need care.
- Status
- A demo built as a sample of my work. It is not in use at any real clinic.
- My role
- Planning, design and implementation, on my own.
- Technology
- Next.js, TypeScript and Tailwind CSS. The opening status, the next-session notice and the structured data for search engines (schema.org MedicalClinic) are all built from the same timetable. Notices are turned into post drafts for X, Instagram and LINE Official Account. No external maps, booking services or fonts are loaded.
- Why a physician builds it
- The medical advertising guidelines and the patient's path to a visit are part of the design from the start: for example, not naming the fever slot as a separate "clinic", and pointing urgent symptoms to emergency number 119 rather than a booking screen. The wording checker is only an aid; a person makes the final check against the guidelines.
Demo: a fictional clinic's website
The site inside the frame is in Japanese, as a Japanese clinic's site would be. The clinic name, doctor, address, phone number and queue numbers are all fictional.
内科・小児科
ほしなみ内科・こどもクリニック架空
お子さまから大人まで、地域のかかりつけとして
- 一般の診療
- ただいまの枠(受付は 11:45 まで)
- 発熱などの症状がある方の診察時間
- 次は 本日 14:30〜
一般の診療の順番待ち架空のサンプル値
11 人待ち(目安 66 分)
受付は各枠の終了 15 分前までです。目安の時間は診察の内容で前後します。
お知らせ
- インフルエンザの予防接種の受付を始めました
- 臨時休診のお知らせ
- Web での受付の案内を新しくしました
診療時間
| 時間 | 月 | 火 | 水 | 木 | 金 | 土 | 日 | 祝 |
|---|---|---|---|---|---|---|---|---|
| 午前9:00〜12:00 | 診療(今の枠) | 診療 | 診療 | 診療 | 診療 | 診療 | 休診 | 休診 |
| 発熱などの症状がある方14:30〜15:00 | 診療 | 診療 | 休診 | 診療 | 診療 | 休診 | 休診 | 休診 |
| 午後15:00〜18:00 | 診療 | 診療 | 休診 | 診療 | 診療 | 休診 | 休診 | 休診 |
休診日: 水曜午後・土曜午後・日曜・祝日。受付は各枠の終了 15 分前までです。 発熱などの症状がある方は、一般の診療と時間を分けています。来院の前にお電話ください。
初診の方へ
お持ちいただくもの
- マイナ保険証 または 資格確認書
- お薬手帳(お持ちの方)
- 紹介状(お持ちの方)
- お子さまは母子健康手帳と医療証
受付から会計まで、混み具合によって時間が変わります。
Web 受付の案内
胸の痛み、息苦しさ、意識がおかしい、けいれんが止まらないなど、急な症状があるときは、この画面ではなく 119 番に電話してください。
院長あいさつ
院長 (架空の人物)
内科と小児科の診療を行っています。気になる症状があれば、ご家族そろってご相談ください。
アクセス
- 住所
- 〇〇県〇〇市〇〇町 1-2-3
- 電車
- 〇〇駅から徒歩 5 分
- 駐車場
- 駐車場 8 台
- 電話
- 0X-XXXX-XXXX
What to try
- Change the day and time above: the open-now badge, the next-session notice and the queue change, and the matching slot in the timetable is marked.
- In the online visit guide (Web 受付の案内), choosing a reason for the visit shows the right slot and what to bring. It never decides where to go based on symptoms.
- On the smartphone screen, the call and visit buttons stay fixed at the bottom. In the demo, neither button calls or books anything.
Social media post drafts
Turns a site notice into drafts for X, Instagram and LINE Official Account, then checks the length and the wording against medical advertising rules.
- X169 / 280 (approx. weighted count)
【ほしなみ内科・こどもクリニック】インフルエンザの予防接種の受付を始めました 予防接種は事前の予約制です。お子さまは母子健康手帳をお持ちください。 https://clinic.example/news/vaccine
No listed phrases found
- Instagram107 / 2200 characters
インフルエンザの予防接種の受付を始めました 予防接種は事前の予約制です。お子さまは母子健康手帳をお持ちください。 詳しくはプロフィールのリンクからご覧ください。 #予防接種 #インフルエンザ #内科 #小児科
No listed phrases found
- LINE Official Account102 / 5000 characters
インフルエンザの予防接種の受付を始めました 予防接種は事前の予約制です。お子さまは母子健康手帳をお持ちください。 詳しくはこちら https://clinic.example/news/vaccine
No listed phrases found
This is a demo and nothing is posted. Social posts by medical institutions also fall under Japan's advertising rules. For real use, scheduled posting would be built on each platform's official API after checking its terms, with a human check before anything goes out. Drafts are built from templates, without generative AI.
Medical advertising wording checker
Paste website copy and it marks wording worth checking under Japan's medical advertising rules. It works on Japanese text.
Wording to review
10 places地域で一番1の名医2が、最新の治療3で必ず治4します。 当院のインフルエンザ予防接種は今だけ5半額6キャンペーン7中です。 患者様の声8: 「他院より9待ち時間が短く、痛くない10検査でした」 最高血圧が高めの方は、健康診断の結果をお持ちください。
1.「地域で一番」Comparisons and superlatives
Claims of being better than other medical facilities cannot be advertised, even when true.
How to rework it: 順位ではなく、診療日や診療体制などの事実を書く
2.「名医」Exaggeration and guarantees
Guaranteeing results or safety may mislead patients.
How to rework it: 経歴や資格など、確かめられる事実だけを書く
3.「最新の治療」Comparisons and superlativesDepends on context
Claims of being better than other medical facilities cannot be advertised, even when true.
How to rework it: 「最新」と書くなら、機器の名前や導入した年など確かめられる事実にする
4.「必ず治」Exaggeration and guarantees
Guaranteeing results or safety may mislead patients.
How to rework it: 効果を言い切らず、治療の内容と、効果に個人差があることを書く
5.「今だけ」Discounts and deadlines
Rushing people to visit with discounts or deadlines may count as undignified advertising.
How to rework it: 値引きや期限で受診を急がせず、通常の費用を書く
6.「半額」Discounts and deadlines
Rushing people to visit with discounts or deadlines may count as undignified advertising.
How to rework it: 値引きや期限で受診を急がせず、通常の費用を書く
7.「キャンペーン」Discounts and deadlines
Rushing people to visit with discounts or deadlines may count as undignified advertising.
How to rework it: 値引きや期限で受診を急がせず、通常の費用を書く
8.「患者様の声」Patient testimonialsDepends on context
Patient accounts of a treatment or its results cannot appear on a clinic website.
How to rework it: 治療の内容や効果に関する患者の感想は載せない
9.「他院より」Comparisons and superlatives
Claims of being better than other medical facilities cannot be advertised, even when true.
How to rework it: 他の医療機関と比べず、自院の取り組みだけを書く
10.「痛くない」Exaggeration and guarantees
Guaranteeing results or safety may mislead patients.
How to rework it: 痛みを和らげる工夫と、起こりうる副作用・リスクを書く
This is not a legal judgment. It only matches a fixed list of words, so it cannot catch other wording, images or claims that are untrue. The categories are examples and do not cover the whole guideline. The suggested rewording, used as is, does not make the copy compliant either.
SEO checklist
A checklist for being found in search. The two "Verified" items are actually cross-checked against the data by this demo.
- VerifiedOpening hours in structured data match the timetableCompared minute by minute for each weekday. A mismatch can show the wrong hours in search results.
- VerifiedConsistent name, address and phoneKept identical between the site and the structured data, and with the Google Business Profile (checked by a person).
- Check before launchTitle and description for each pageEach page, such as hours, access and first visit, gets its own description that matches its content.
- Check before launchCanonical URLAfter launch, the live HTML is checked to confirm each page points to itself.
- Check before launchDisplay on smartphonesCall and reception buttons are pinned to the bottom, and text size and tap targets are checked.
- Check before launchSitemap and Search ConsoleSubmit the sitemap and check indexing regularly.
Data for search engines (sample output)
A schema.org MedicalClinic built from the same timetable, written per day with back-to-back slots joined. It is not embedded in this page, and the values are placeholders, so the fictional clinic cannot be mistaken for a real one.
{
"@context": "https://schema.org",
"@type": "MedicalClinic",
"name": "(架空)ほしなみ内科・こどもクリニック",
"url": "https://clinic.example/",
"telephone": "0X-XXXX-XXXX",
"medicalSpecialty": [
"https://schema.org/PrimaryCare",
"https://schema.org/Pediatric"
],
"address": {
"@type": "PostalAddress",
"addressCountry": "JP",
"streetAddress": "〇〇県〇〇市〇〇町 1-2-3"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Monday",
"opens": "09:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Monday",
"opens": "14:30",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Tuesday",
"opens": "09:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Tuesday",
"opens": "14:30",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Wednesday",
"opens": "09:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Thursday",
"opens": "09:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Thursday",
"opens": "14:30",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Friday",
"opens": "09:00",
"closes": "12:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Friday",
"opens": "14:30",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "12:00"
}
]
}