Francophone African optical market: Senegal 18 billion XOF/year, Ivory Coast 28 billion, Nigeria $850M. A modern optician combines 3 revenue streams: eye exams (clinical), glasses (e-commerce + showroom), contacts (recurring).
TL;DR
- Hybrid stack: online booking (eye exam) + glasses catalog + virtual try-on.
- Webcam virtual try-on = +35% conversion.
- Recurring contacts via Wave subscription = stable MRR.
Optical clinic architecture
`
[Patient]
↓
[Optical clinic site]
├── Frames + sunglasses catalog
├── Subscription contacts
├── Eye tests / consultation booking
├── Virtual try-on
└── Patient portal (my prescriptions, order history)
[Backend]
├── E-commerce (Medusa)
├── Booking (Cal.com integrated)
├── Frame + lens stock
├── Prescription tracking (correction)
└── Contacts subscription
`
Step 1 — product model
`prisma
model Frame {
id String @id @default(cuid())
slug String @unique
brand String
model String
type String
shape String
material String
colors String[]
gender String
priceXof Int
images Image[]
stock Json
isActive Boolean @default(true)
}
model Lens {
id String @id @default(cuid())
type String
material String
coatings String[]
priceXof Int
}
model EyeExam {
id String @id @default(cuid())
customerId String
scheduledAt DateTime
durationMin Int @default(30)
status String
examinerId String
prescription Prescription?
paymentXof Int
}
model Prescription {
id String @id @default(cuid())
customerId String
examId String @unique
rightEye Json
leftEye Json
pupillaryDistance Int
validUntil DateTime
}
model LensSubscription {
id String @id @default(cuid())
customerId String
lensProductId String
frequency String
nextDelivery DateTime
active Boolean @default(true)
}
`
Step 2 — virtual try-on
`tsx
'use client';
import { useEffect, useRef } from 'react';
export function VirtualTryOn({ frame }) {
const videoRef = useRef
const canvasRef = useRef
useEffect(() => {
async function setup() {
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
if (videoRef.current) videoRef.current.srcObject = stream;
const faceDetection = await loadFaceDetection();
function loop() {
if (videoRef.current && canvasRef.current) {
const detections = faceDetection.detect(videoRef.current);
drawFrameOnFace(canvasRef.current, frame, detections);
}
requestAnimationFrame(loop);
}
loop();
}
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
setup();
}, [frame]);
return (
);
}
`
Try-on = +35% conversion on product pages.
Step 3 — checkout with correction
`tsx
'use client';
export default function LensOptionsPage() {
const [hasPrescription, setHasPrescription] = useState
const [prescription, setPrescription] = useState({});
const [lensType, setLensType] = useState('single_vision');
const [coatings, setCoatings] = useState
return (
{hasPrescription === true && ( )} {hasPrescription === false && ( )}Configure your lenses
Do you have an optical prescription?
Enter your correction
Free clinical eye test (with purchase)
Lens type
Coatings
);
}
`
Step 4 — contact lens subscription
`tsx
Contact subscription - never run out
Your contact box delivered automatically
-15% vs individual purchase · Cancel anytime
`
Subscription = stable MRR. 1 loyal contacts customer = ~300K XOF/year recurring.
Step 5 — eye exam booking
See dental clinic method → — similar pattern:
- Cal.com integrated
- Optometrist availability slots
- SMS + WhatsApp confirmation
- Digital prescription capture in office
Step 6 — local SEO + e-commerce
Target articles:
- "Cheap glasses Dakar: 2026 quality guide"
- "Eye test Almadies Cocody: how much?"
- "Contacts or glasses: pros and cons"
- "How to choose the right frame per face"
- "Blue light blocker: useful or marketing?"
GMB optimized "Optician Dakar" / "Eyewear Almadies" like dental method →.
Real case — Almadies optical clinic
| Metric | Before | After 12 months |
|---|---|---|
| Eye tests/month | 65 | 145 |
| Glasses sales/month | 38 | 92 |
| Contact subscribers | 0 | 78 |
| Recurring MRR | 0 | 1.95M XOF |
| Total monthly revenue | 4.8M XOF | 12.6M XOF |
FAQ
Q: Accurate virtual try-on?
A: ~80-85% accuracy in 2026 (MediaPipe Face Mesh). Enough for pre-selection. Physical try recommended before final purchase.
Q: Selling corrective glasses without local prescription?
A: In Senegal, prescription mandatory for corrective lenses. Non-corrective sunglasses = free. CI similar.
Q: Competition?
A: Optique 2000 (international), Sun Vision (SN), Optical World (CI). Far from saturated market. Premium niche reinventable.
Conclusion
A digitalized optical clinic = 2-3× revenue of classical clinic. 15-30M XOF investment for full stack (e-commerce + try-on + booking + subscriptions). 18-24 month ROI on average optician.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.
