Professional Global Medical Consumables Supplier
Factory Direct | ISO 13485 | CE | FDA Certified
This repository contains the official website for V5 Medical LTD (v5md.com), a China-based medical supply chain integrator specializing in surgical consumables, sterile packs, and medical devices for global distributors.
The site is built as a high-performance static web application, optimized for:
- ⚡ Speed: Cloudflare CDN with <1s LCP
- 🔍 SEO: Dynamic meta tags, JSON-LD structured data (via
seo-utils.js) - 🎨 UX: Mobile-first responsive design
- 🛡️ Security: CSP headers, XSS protection
- Unified Header & Footer:
js/layout.jsrenders navigation across all pages - Single Source of Truth: Update menu/contact once, applies globally
- Config First: All globals (contact, API URLs, CDN paths) in
js/config.js - Environment Aware: Auto-detects localhost vs production
- Triple Fallback System via
js/image-utils.js:- Cloudflare R2 CDN (Primary)
- Local path (Development, aligned with
images/products/structured catalog) - GitHub Raw (Emergency)
- Default Placeholder (Final)
- Standardized product image directory structure for surgical sutures, protective equipment, dental products, etc.
- No Backend Required: Product catalog in
js/complete-products.js - Features: Category filtering, real-time search (debounced in
catalog.html), dynamic detail pages - Dual Database Support:
product-loader.jssupports legacy (productDatabase) and new (completeProductDatabase) schemas
- Dynamic Meta Tags:
js/seo-utils.jsupdates<title>,<meta>, JSON-LD per page - Performance: LCP images use
fetchpriority="high", lazy loading for below-fold content - Analytics: Built-in tracking for page views, WhatsApp clicks, product interactions (GDPR compliant)
- Blog & Technical Content:
/blog/runs Docsify for Markdown-based content- Medical packaging specs (Tyvek vs. Medical Paper)
- CE Marking (MDR) compliance guides
- Surgical pack sterilization standards (EN ISO 13408)
- Payment strategy ("Two-Lane" system for fast delivery)
- Categories: Sourcing Strategy, Technical Specs, Compliance (MDR), Sterilization Standards
- Online Viewing: Direct PDF access from product catalog page
- GitHub-hosted:
pdf/Catalog.pdfauto-deployed with site - No Backend Required: Static file served via CDN
- Stripe: Credit card payments for samples (<$500)
- Bank Wire (T/T): For bulk orders (>$500)
- Dual-lane system: Fast lane (Credit Card) for trials, Commercial lane (T/T) for production
- URL:
/workbench/ - Authentication: Password-protected (SHA-256 hashed in
workbench-auth.js) with brute-force protection - Modules:
- Order management (
workbench-orders.js) - Pricing calculator, Finance Tools
- Config utilities (
workbench-config.js)
- Order management (
- Storage: Cloudflare Workers KV + localStorage fallback
- Core Web Vitals Tracking:
performance-monitor.jsrecords TTFB, DOM Ready, Full Load metrics - Optimized Loading: Non-critical JS deferred, explicit image dimensions (0 CLS)
v5md/
├── index.html # Homepage (Hero, Features, CTA)
├── about.html # Company Profile, Team, Certifications
├── catalog.html # Product Catalog (Search & Filter with WhatsApp CTA)
├── product-detail.html # Dynamic Product Template
├── contact.html # Multi-type Contact Form (Quote/QA/OEM)
├── payment.html # Secure Payment Portal (Stripe + Bank Wire)
├── blog/ # Docsify Knowledge Hub
│ ├── index.html # Blog Entry Point
│ ├── README.md # Blog Homepage (Technical Specs & Guides)
│ ├── _sidebar.md # Navigation Sidebar
│ └── posts/ # Markdown Articles
│ ├── tyvek-vs-paper.md
│ ├── payment-strategy-guide.md
│ ├── ce-marking-process.md
│ ├── surgical-pack-sterilization.md
│ └── ...
├── workbench/ # Internal Tool (Password-Protected)
│ ├── index.html # Workbench Entry
│ └── js/ # Workbench Modules
│ ├── workbench-auth.js # Login with brute-force protection
│ ├── workbench-dashboard.js
│ ├── workbench-orders.js # Order clearing & management
│ ├── workbench-pricing.js
│ ├── workbench-finance.js
│ └── workbench-config.js # Config helper methods
├── js/ # Core Logic
│ ├── config.js # 🔧 [CRITICAL] Global Settings & Paths
│ ├── layout.js # 🔧 [CRITICAL] Header/Footer Renderer
│ ├── main.js # General UI Interactions (Mobile Menu, Scroll)
│ ├── complete-products.js# Product Database (51 SKUs)
│ ├── image-utils.js # Smart Image Loader (Triple Fallback)
│ ├── seo-utils.js # Dynamic SEO Manager (JSON-LD, Meta Tags)
│ ├── product-loader.js # Async Product Data Loader (dual DB support)
│ ├── security-utils.js # XSS Protection, Input Validation
│ ├── seo-utils.js # Page title/meta update & Schema injection
│ ├── performance-monitor.js # Core Web Vitals tracking
│ └── ...
├── css/
│ └── style.css # Custom Overrides for Tailwind
├── images/ # Local Asset Fallbacks
│ ├── products/ # Standardized Product Images (51 files)
│ │ ├── surgical-sutures/
│ │ ├── surgical-instruments/
│ │ ├── gauze-dressings/
│ │ ├── protective-equipment/
│ │ ├── injection-infusion/
│ │ ├── dental-products/
│ │ └── surgical-packs/
│ ├── logo/
│ │ └── v5logo.png
│ ├── hero-bg.jpg
│ └── ...
├── pdf/ # Downloadable Catalogs
│ ├── Catalog.pdf
│ ├── price list.pdf
│ └── V5_Medical_Capability_Statement.pdf
├── _headers # Cloudflare Pages Headers (CSP, HSTS, CORS)
├── _redirects # Cloudflare Pages Redirects (SEO, UTM)
├── robots.txt # SEO Crawler Instructions
├── sitemap.xml # Main Site Sitemap
└── README.md # This File
Edit js/config.js → Change CONTACT object → Auto-updates Header, Footer, Contact Page.
Edit js/complete-products.js → Add/modify object in completeProductData array → Catalog updates automatically:
{
id: 'new-product',
name: 'New Surgical Suture',
category: 'surgical-sutures', // Aligned with image directory structure
images: ['images/products/surgical-sutures/new-product.jpg'],
price: 'Contact for Price',
certifications: ['ISO 13485', 'CE']
}Edit js/layout.js → Update renderHeader() or renderFooter() → Changes apply site-wide.
Open specific HTML file → Edit content inside <main> tag → Do not manually add <nav> or <footer> (auto-injected).
- Create Markdown file in
blog/posts/ - Add YAML frontmatter:
--- title: "Your Title" date: "2025-01-02" author: "V5 Team" category: "Compliance" ---
- Update
blog/_sidebar.mdwith link (e.g., technical specs for sterile barrier systems)
- Clear Orders: Use
clearAllOrders()inworkbench-orders.js(with confirmation prompt) - Auth Management:
workbench-auth.jshandles login attempts, lockout logic (15min lockout after max attempts) - Config Access: Use
get()method inworkbench-config.jsfor safe nested config access
- Any static web server (e.g., Live Server, Python
http.server, Node.jshttp-server)
git clone https://github.com/alden888/v5md.git
cd v5md
# Option 1: VS Code Live Server
# Install "Live Server" extension → Click "Go Live"
# Option 2: Python
python3 -m http.server 8000
# Visit http://localhost:8000
# Option 3: Node.js
npx http-server -p 8000
⚠️ CORS Warning: Opening HTML files directly (file://) may block JS features (e.g., product database loading) due to browser security policies.
- Connect GitHub repo to Cloudflare Pages
- Pre-configured files:
_headers: CSP, HSTS, caching rules_redirects: SEO-friendly redirects, WhatsApp shortcuts
- Build Command: None (purely static)
- Output Directory:
/(root)
- Enable GitHub Pages in repo settings
- Set source to root directory
⚠️ Note: Custom headers (_headers) won't work (no CSP/HSTS support)
- LCP (<2.5s): Critical images use
fetchpriority="high" - FID (<100ms): Non-critical JS deferred
- CLS (0): Explicit image dimensions (aligned with standardized product image structure)
- Static Assets: 1 year cache (
immutable) - HTML: 1 hour cache (
must-revalidate) - Cache Busting: Version parameters (
main.js?v=2.2.0)
- Cloudflare R2: Primary image host (for product images, logo)
- GitHub Raw: Emergency fallback
- Auto-failover: Triple-layer error handling in
image-utils.js
- Content Security Policy (CSP): Enforced via
_headers - HTTPS Only: Cloudflare auto-redirect
- XSS Protection:
security-utils.jssanitizes inputs - CSRF Protection: Form nonces, SameSite cookies
- Workbench Security: Password hashing, brute-force protection, lockout mechanism
Built-in tracking for:
- Page views (via
performance-monitor.js) - PDF downloads
- WhatsApp clicks (tracked in
catalog.htmlWhatsApp button) - Product interactions
- Core Web Vitals (TTFB, DOM Ready, Full Load)
Compliant with GDPR (anonymous data, no PII).
- Header/Footer render on all pages
- Product images load with fallback (test broken CDN paths)
- Contact form submission (test mode)
- Mobile responsiveness (375px → 1920px)
- Cross-browser (Chrome, Firefox, Safari, Edge)
- Workbench authentication & lockout logic
- Product search in
catalog.html - SEO meta tags update (verify via
seo-utils.js)
# Lighthouse CI
npm install -g @lhci/cli
lhci autorun --config=lighthouserc.json- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
- JS: ES6+, no jQuery (consistent with existing utils like
seo-utils.js,performance-monitor.js) - CSS: Tailwind utility-first, minimal custom CSS (
css/style.css) - HTML: Semantic tags, ARIA labels for accessibility
- File Naming: Lowercase with hyphens (aligned with product image structure)
© 2025 V5 Medical LTD. All Rights Reserved.
Unauthorized copying, modification, distribution, or use of this software is prohibited without prior written permission from V5 Medical LTD.
- Email: tech@v5md.com
- WhatsApp: +44-078-9504-7944
- Website: v5md.com
- Sales: sales@v5md.com
- QA/Regulatory: qa@v5md.com (CE Marking, sterilization standards)
- Finance: finance@v5md.com (payment strategy, T/T/Credit Card lanes)
- Cloudflare Pages Docs
- Tailwind CSS Docs
- Docsify Docs
- Stripe Payment Links
- EN ISO 13408 - Sterilization Standards
- MDR (EU 2017/745)
- Product Catalog PDF online viewer (
catalog.htmlsidebar) - QA Team on-site photo in homepage hero section
- Updated all JS file versions across site for cache busting
- Migrated
layout.jsV5Layout towindowobject for better module detection
- Privacy Policy footer link now correctly points to
privacy.html - ON-SITE PROTOCOL label repositioned to top-left of image
- Fixed layout.js loading failure on Cloudflare Pages (delayed config access)
- PDF links now use relative paths (hide GitHub repo from customers)
- Payment portal (
payment.html) with Stripe integration (Two-Lane payment system) - Internal workbench (
/workbench/) with authentication & order management - Blog knowledge hub (
/blog/) powered by Docsify (CE Marking, sterilization, packaging specs) - Enhanced SEO utilities (
seo-utils.js) with JSON-LD injection - Product loader system (
product-loader.js) with dual database support - Standardized product image directory structure (
images/products/)
- Migrated to complete product database (51 SKUs)
- Updated image loading with triple fallback (aligned with new image structure)
- Improved mobile responsiveness for
catalog.htmlsearch & WhatsApp CTA - Refactored performance monitoring (
performance-monitor.js) for Core Web Vitals
- Image path resolution in product catalog (matching
images/products/structure) - Mobile menu z-index conflicts
- Google Translate positioning
- Workbench login error handling
- Initial public release
Last Updated: March 22, 2025
Maintained by: V5 Medical Development Team
Build Status: ✅ Stable (Production-Ready)
