With AI you can have your pharmacy website up in a weekend. Building it is not the problem: the problem is that the AI will happily write things you are not allowed to publish, it will not warn you, and the person whose name is on the site is you.
Why this is not a detail
Ask any model for a product page for a vitamin C supplement and it will hand you something with "boosts your immune system" and "prevents colds". It sounds good, it sells, and it is an unauthorised health claim. The model does not know that is illegal, because it has read a thousand websites that say it — and almost all of them are wrong.
The line between what you may and may not say is not the subject: it is the exact wording in the authorised claims register. "Boosts your defences" is not in it. "Contributes to the normal function of the immune system" is, for specific nutrients under specific conditions of use. A model cannot tell those two sentences apart; an inspector can.
| Ask the AI for this | The law decides this |
|---|---|
| The site structure and the filler copy | What you may claim about a product |
| Drafting the "about us" and opening hours | Whether you may sell medicines online |
| The code, the CSS, the contact form | Which logo you must display, and where |
| Translating your site into another language | Which identifying details are mandatory |
| Content ideas and an editorial calendar | Which medicines you may not mention to the public |
What applies, depending on what you want to do
A site that informs is not the same as one selling pharmacy-only medicines. Tick what you plan to do and see what lands on you:
Duties auditor
Check what the AI wrote for you
Paste the text you are about to publish — a product page, a post, the home page. It is checked in your browser: nothing is uploaded.
Claims checker
How to actually build it
- Decide first what it will do — inform, sell general sale items, sell medicines. It changes the duties, the cost and the timeline.
- Ask the AI for structure and code, not for claims. It is excellent at the first.
- Write the product pages yourself, or require it to use only wordings from the authorised register and check each one. Writing them yourself is faster.
- Run the checker before publishing each piece of text.
- Show it to your regulator's guidance before it is on Google. Asking first is far cheaper than fixing later.
The six pages that do the work
A pharmacy website does not need thirty pages. It needs six, done well — and one of them brings more visits than the other five put together. Before asking an AI for anything it helps to know what you are building.
| Page | Who it is for | What cannot be missing |
|---|---|---|
| Home | Somebody searching for you by name | Today's hours, a tappable phone number and where you are. On the first screen |
| Hours and how to find us | The most visited page, by a distance | Bank holidays, out-of-hours rota and parking. It is what people search at 21:40 |
| Services | People who do not know you offer them | One page per service, not a list. Each service is a different search |
| About us | Somebody deciding whether to trust you | The pharmacist's name, registration number and faces. It is a pharmacy, not a shop |
| Contact | Somebody who has decided | Phone, WhatsApp if you genuinely answer it, and a form |
| Legal notice and privacy | Mandatory | Not optional and not decorative. It has legally required content |
From zero to published: the technical steps, one by one
Everything above is what to build and what you may not say. This is how you actually build it, with the real stack — not a single file dragged onto a free hosting service, which is a valid and simpler alternative, but a different case — and with the literal prompts for the first two pages.
-
Your GitHub account, if you don't have one
Go to github.com and click Sign up. It asks for an email, a password and a username — that username becomes part of your repository's address, so pick something simple with no spaces. Confirm the email it sends you and that is it: it is free, and the free plan is more than enough for this, private repositories included.
-
Create the repository
From the main page, click the green New button (or the + in the top right → New repository). Give it a name — for example
pharmacy-your-pharmacy—, mark it Private, and tick Add a README file. Click Create repository. The place your site is going to live now exists — empty so far, but it exists. Why each of those three details matters is explained in The stack you need; here we go straight to it. -
Open an AI agent on that repository
The simplest way, with nothing to install, is claude.ai/code: sign in with your account, connect your GitHub account the first time it asks, and pick the repository you just created. That opens a workspace with the project in front of the agent — exactly as if it were on your own computer, but with no terminal and no install. If you would rather work with Claude Code or Codex installed on your machine, every step from here on is identical; only this one differs.
-
The first prompt: the home page
Here is the whole prompt, with your data in place of the highlighted gaps. It follows the same mould as the previous lesson — what, where, how it is checked, and what not to touch — because "build my pharmacy's website" on its own is exactly the task that Coding with Claude Code or Codex flags as the one that goes worst.
Build the HOME page of my pharmacy's website. One file, index.html, at the root of the repository, with its CSS in a separate file assets/style.css linked from the HTML. No frameworks, no libraries. DATA (if you are missing one, leave [TO CONFIRM] in its place; do not invent it) - Pharmacy name: Pharmacy ... - Town or area: ... - Today's hours: ... - Phone number: ... - Address, with the Google Maps link from your listing: ... WHAT IT MUST HAVE, IN THIS ORDER, WITH NO SCROLLING ON THE FIRST SCREEN - Pharmacy name, today's hours and phone number, right at the top. - One sentence on what services you offer. - The address with the Maps link. - A footer with name, company number and contact ([TO CONFIRM] if you do not have those yet). HOW IT IS CHECKED - Double-clicking index.html opens it fine in the browser. - Narrowing the browser window to phone width, nothing overflows and nothing needs sideways scrolling. - The phone number is a tappable link (tel:). WHAT NOT TO DO - Do not invent any detail I have not given you: use [TO CONFIRM]. - Do not add a contact form, cookies, or anything that loads from an external site (including Google fonts). That is a later step. - Do not touch any file other than index.html and assets/style.css.
The agent may take a minute and will hand back both files in full. Open them — double-clickindex.html— before moving on. If anything does not match what you asked for, say exactly what looks wrong and ask for the whole file again: it is the same rule from this school's first practical case. -
Save the change and push it to GitHub
You do not need to know a single command: ask the agent itself — "commit this change with a clear message and push it to GitHub." It does it for you. If you ever want to understand exactly what it did, the six commands behind it are explained in The stack you need; you do not need to know them to follow this case.
-
Publish it with Vercel
Go to vercel.com and click Continue with GitHub — it is the same account you just used, so it is one click and no new password. Click Add New → Project, find your repository in the list and click Import. There is nothing special to configure for a site like this, so leave the options as they are and click Deploy. In under a minute you get a Visit button: that is your site, on the internet, with a real address.
-
Check it on your actual phone
Not in the desktop browser with the window narrowed: on your own phone, on mobile data, not wifi. It is the check that gets skipped most and noticed most — the "before moving on" in the previous lesson says so for a reason.
-
The second prompt: the hours page
It is the one that gets the most traffic of the six, so it goes second. Same mould, same care with the data.
Build the HOURS AND HOW TO FIND US page, in hours.html, linked from index.html. Use the same assets/style.css that already exists: do not create a new one. DATA - Full hours, day by day: ... - Bank holidays with different opening hours: ... - How to know if today is an out-of-hours day: ... - The address and Maps link are the same as on index.html WHAT IT MUST HAVE - The hours in a table or a list, one day per line. Never as a single run-on line of text: it breaks in the wrong place on a phone. - A link back to index.html, at the top. HOW IT IS CHECKED - The hours on this page are identical to the ones on index.html. If one needs to change, tell me so I change the other too. - It reads well with the window narrowed, without the table overflowing. WHAT NOT TO DO - Do not invent bank holidays or an out-of-hours rota I have not given you. - Do not touch index.html or assets/style.css other than to add the link to this page.
If it does not work first time
What a pharmacy CANNOT say on its website
This is where a general-purpose AI lands you in trouble without meaning to, because it writes the way marketing writes: with superlatives and with promises. In a pharmacy that is not a question of style.
| What the AI writes on its own | Why it cannot go out |
|---|---|
| "We help you cure your…" | It attributes a therapeutic action to a service. It cannot be claimed |
| "The best treatment for…" | It is a treatment recommendation, and a comparative one |
| Names of prescription medicines | Advertising them to the public is prohibited. Not even the name |
| "Guaranteed results", "eliminates", "cures" | It promises a health outcome |
| Before-and-after photos | It is outcome advertising by another route |
| Customer reviews about a product or an effect | It is a therapeutic testimonial, even if a customer wrote it |
How to ask an AI to write this
A model told "write my pharmacy's website" gives you exactly the text in the table above: enthusiastic, generic, and with two sentences that have to go. The fix is in the task, and it has four parts.
Write the SERVICES page for a pharmacy in [TOWN].
CONTEXT
- Older neighbourhood, many chronic and polypharmacy patients.
- Real services: dosette boxes, blood pressure checks, pharmacist
consultations, cardiovascular risk screening.
LIMITS (mandatory)
- Do NOT promise any health outcome.
- Do NOT name any prescription medicine.
- Do NOT compare us with other pharmacies.
- Do NOT use "best", "guaranteed", "eliminates", "cures".
- If I have not told you something, do NOT invent it: write [TO CONFIRM].
FORM
- One block per service: what it is, who it is for, how to book it.
- Short sentences. It is read on a phone.
- Between 120 and 180 words per service.[TO CONFIRM] line prevents the most grief. Without it, a model
that does not know your opening hours invents plausible ones — and invented opening hours on a
pharmacy website mean somebody standing in front of a closed shutter. With it, the gaps are
visible at a glance and get filled in five minutes.
What must ALWAYS be checked, in this order
-
The facts that can be verified
Hours, phone, address, registration number. One by one, against reality. It is the only part of the site that, if wrong, does real damage the same day.
-
The three regulatory questions
Does it promise a health outcome? Does it name a prescription medicine? Does it compare? Three quick passes over the whole text. Ten minutes, and they are what save you the trouble.
-
The links
Click all of them. A model writes URLs that look right and do not exist, and there is no way to tell by reading: they look exactly like the good ones.
-
Whether it sounds like you
This one is last and it is not cosmetic. A site that reads like a chain's brochure, in a neighbourhood where people know you by name, subtracts trust rather than adding it. Read it aloud: if you would not say it that way at the counter, change it.
The Google listing matters more than the website
This has to be said even if it is deflating: for a pharmacy, the Google listing gets more visits than the website, and it is where people check the opening hours. A flawless site with an out-of-date listing is wasted work.
| On the listing | Why it matters so much |
|---|---|
| Hours, with bank holidays marked one by one | It is the most-checked fact about a pharmacy, and the only one that annoys people when wrong |
| Services listed | They surface in searches your website never reaches |
| Real photos of the premises | They help people physically find you, which is a real problem |
| Replying to reviews | It is read more than you think. And unanswered bad ones weigh double |
Speed and mobile: two checks, not a project
Nearly everybody will open you on a phone, in the street, on a poor connection. There is no need to obsess about this, but there are two checks that rule out 90% of the problems:
| Check | What you are looking for |
|---|---|
| Open it on your own phone, on mobile data, not wifi | That the hours and the phone number are visible without scrolling |
| Look at the size of the images | A 4 MB photo of the shopfront is the number one reason a pharmacy site is slow. Dropping it to 200 KB makes no visible difference |
The most expensive mistake: publish and forget
A pharmacy website is never finished: it is maintained. And the real maintenance fits in a very short list, because almost everything in it never changes.
| Every | What gets touched | How long |
|---|---|---|
| Whenever it changes | Hours, bank holidays and the rota. On the site and on the listing | Five minutes, and it is the only urgent one |
| Month | Replying to new reviews | Ten minutes |
| Quarter | Look at what people search to reach you and write the missing page | An afternoon, and it is what makes it grow |
| Year | Check the listed services are the ones you actually offer | Half an hour |
Three things worth having that are almost never there
-
TODAY's hours, calculated, not written out
"Mon-Fri 9:00-21:00, Sat 9:30-14:00" makes the reader check what day it is and do the sum. "Open today until 21:00" does not. It is ten lines of code and it is the difference between answering the question and handing over the data for somebody else to answer it.
-
The phone as a link, not as text
On a phone, a tappable number dials; a written number has to be selected and copied, and half the people will not bother. It is one attribute on one tag and it is, measurably, one of the biggest behaviour changes on a local site.
-
Saying explicitly what you do NOT do
"We do not sell online", "we do not deliver", "we have no car park". It feels counter-intuitive to write it and it prevents phone calls, wasted journeys and bad reviews from an expectation nobody created on purpose.
Before moving on
- I know which duties change depending on what the site sells.
- I know I cannot sell prescription-only medicines without a valid prescription.
- I know I cannot advertise prescription-only medicines to the public.
- I know why "boosts your immune system" cannot be written, and what goes instead.
- I will check my regulator's guidance before publishing.
Sources. Human Medicines Regulations 2012 (advertising and distance selling) ·
GPhC standards for registered pharmacies and guidance for pharmacy services provided at a
distance · MHRA registered online sellers list and distance selling logo · Regulation (EC)
1924/2006 on nutrition and health claims (retained) · Electronic Commerce (EC Directive)
Regulations 2002 · UK GDPR, DPA 2018 and PECR · Consumer Contracts Regulations 2013.
This is orientation, not legal advice, and it is written from a UK starting
point. If you practise elsewhere, the shape of the rules is similar but the names and the
thresholds are not: check your own regulator before publishing.