A professional, responsive, and accessible web portal for ISP customers to download content from a local FTP/Media server.
ISP Media Vault is a standalone HTML5 and CSS3 web application that provides a user-friendly interface for ISP customers to browse and download curated content from the ISP's local media server. The portal is designed to be fast, accessible, and mobile-responsive.
- β Direct FTP Downloads - One-click download buttons with proper file naming
- β Responsive Design - Fully functional on desktop, tablet, and mobile devices
- β Accessibility Compliant - WCAG 2.1 Level A compliance with semantic HTML
- β Fast Loading - Optimized for sub-2-second page load times
- β Organized Categories - Content grouped into logical sections (Software, Documentation, Media, Local Content)
- β Professional Branding - Customizable header with ISP logo and branding
- β Dark Mode Support - Automatic dark mode detection and styling
- β Print Friendly - Optimized print styles for documentation
-
Clone or download the project files to your web server:
index.html styles.css -
Place both files in your web server's document root or a designated directory.
-
Ensure your FTP server is accessible on the local network with anonymous read access (or configure token-based access).
Edit index.html and replace:
- Logo Text: Change "ISP" in the
.logo-placeholderdiv to your ISP's abbreviation - Portal Name: Update "ISP Media Vault" in the
<h1>tag - Tagline: Modify "Your Local Download Center" to your custom tagline
- Homepage Link: Replace
https://www.example-isp.comwith your ISP's actual homepage URL - Footer Links: Update all footer links to point to your actual ISP pages
Replace all FTP URLs in the download links. Current format:
<a href="ftp://media.isp.local/Software/ISP_Router_Config_v2.1.exe"
download="ISP_Router_Config_v2.1.exe"
class="download-btn">Update to your actual FTP server:
- Replace
media.isp.localwith your FTP server's IP address or hostname - Ensure paths match your FTP directory structure
- Keep the
downloadattribute with the filename for proper browser handling
Each content item follows this structure:
<article class="content-item">
<div class="item-header">
<h3>File Name</h3>
<span class="file-type">File Type</span>
</div>
<div class="item-metadata">
<p><strong>File Size:</strong> XX.X MB</p>
<p><strong>Upload Date:</strong> Month DD, YYYY</p>
<p class="item-description">Description of the file.</p>
</div>
<div class="item-actions">
<a href="ftp://your-server/path/filename.ext"
download="filename.ext"
class="download-btn"
aria-label="Download File Name">
<span class="btn-icon">β¬</span> Download
</a>
</div>
</article>To add new items:
- Copy the entire
<article class="content-item">block - Update the file name, size, date, and description
- Update the FTP link and download attribute
- Update the aria-label for accessibility
Edit the CSS variables in styles.css:
:root {
--primary-color: #0052cc; /* Main brand color */
--primary-dark: #003d99; /* Darker shade */
--secondary-color: #f5a623; /* Accent color (orange) */
--success-color: #27ae60; /* Download button color */
/* ... more variables ... */
}-
Anonymous Access (Recommended):
- Enable anonymous FTP access on your media server
- Configure read-only permissions for anonymous users
- Ensure the FTP directory structure matches the URLs in the HTML
-
Token-Based Access (Alternative):
- If anonymous access is not permitted, use FTP URLs with embedded credentials:
ftp://username:password@server-ip/path/file.ext - Security Note: This method exposes credentials in the HTML source. Use only on internal networks.
- If anonymous access is not permitted, use FTP URLs with embedded credentials:
-
Firewall & Network:
- Ensure FTP port (21) is open for local network access
- Test FTP connectivity from client machines before deployment
- Any standard web server (Apache, Nginx, IIS, etc.)
- No server-side processing required (pure static HTML/CSS)
- HTTPS recommended for production (though not required for local networks)
Tested and compatible with:
- β Chrome 90+
- β Firefox 88+
- β Safari 14+
- β Edge 90+
- β Mobile browsers (iOS Safari, Chrome Mobile)
- First Contentful Paint (FCP): < 0.5 seconds
- Largest Contentful Paint (LCP): < 1.5 seconds
- Total Page Load: < 2.0 seconds (on typical ISP network)
- Minimal CSS (no external dependencies)
- No JavaScript frameworks (vanilla CSS only)
- Optimized image placeholders (no external images)
- Semantic HTML for fast parsing
- CSS Grid for efficient layout
- β
Semantic HTML: Proper use of
<header>,<main>,<footer>,<article>,<section> - β Color Contrast: All text meets WCAG AA standards (4.5:1 minimum)
- β Keyboard Navigation: Full keyboard support with visible focus indicators
- β Screen Reader Support: Proper ARIA labels and semantic structure
- β Responsive Text: Readable on all screen sizes
- β Focus Management: Clear focus indicators for all interactive elements
- β Dark Mode: Automatic dark mode support for reduced eye strain
Run these checks in your browser:
- Keyboard Navigation: Tab through all links and buttons
- Screen Reader: Test with NVDA (Windows) or VoiceOver (Mac)
- Color Contrast: Use Chrome DevTools > Lighthouse > Accessibility
- Responsive: Test at 320px, 768px, and 1920px widths
Edit index.html directly:
- Add/remove/modify content items in the appropriate category section
- Update file sizes and dates
- Verify FTP links are correct
- Save and redeploy
For automated content updates, implement a server-side script:
Example: Python Script (generates HTML from FTP directory)
import ftplib
from datetime import datetime
def generate_html_from_ftp(ftp_server, ftp_user, ftp_pass):
ftp = ftplib.FTP(ftp_server, ftp_user, ftp_pass)
# List files and generate HTML content items
# Write to index.html
ftp.quit()Example: Node.js Script (using ftp package)
const FTP = require('ftp');
const fs = require('fs');
const client = new FTP();
// Connect to FTP, list files, generate HTMLThe portal includes four main categories:
- Software & Tools - Executables, installers, utilities
- Documentation & Guides - PDFs, manuals, guides
- Media & Entertainment - Videos, promotional content
- Local Content & Resources - Archives, photos, directories
Add or remove categories by duplicating the <section class="content-category"> block.
- FTP Credentials: Never hardcode credentials in HTML if using token-based access on public networks
- HTTPS: Use HTTPS when hosting on the public internet
- Access Control: Restrict FTP access to authorized users only
- Content Validation: Regularly audit FTP content for malware
- Rate Limiting: Consider implementing rate limiting on the FTP server
- Responsive Grid: Automatically adjusts from 3 columns (desktop) β 2 columns (tablet) β 1 column (mobile)
- Touch-Friendly: Large tap targets (minimum 44x44px) for mobile users
- Fast Loading: Optimized for 4G and WiFi networks
- Readable Text: Font sizes scale appropriately for all devices
- Open
styles.css - Find the
:rootCSS variables section - Update
--primary-colorand--primary-dark - Example:
--primary-color: #ff6b35;(orange)
Replace the .logo-placeholder div with:
<img src="logo.png" alt="ISP Logo" class="logo-image">Add CSS:
.logo-image {
width: 60px;
height: 60px;
object-fit: contain;
}Update in styles.css:
:root {
--font-sans: 'Your Font', sans-serif;
}- All FTP links are functional
- Download buttons work on desktop and mobile
- Page loads in under 2 seconds
- Responsive design works at 320px, 768px, 1920px
- Keyboard navigation works (Tab, Enter)
- Color contrast passes WCAG AA
- Dark mode displays correctly
- Footer links point to correct URLs
- File sizes and dates are accurate
- No console errors in browser DevTools
- Weekly: Verify all FTP links are functional
- Monthly: Update file sizes and dates as content changes
- Quarterly: Review analytics and user feedback
- Annually: Update browser compatibility testing
Issue: Downloads don't start
- Solution: Verify FTP server is accessible and anonymous access is enabled
Issue: Page loads slowly
- Solution: Check network connectivity to FTP server; verify no large files are being loaded
Issue: Mobile layout breaks
- Solution: Test in Chrome DevTools device emulation; check CSS media queries
Issue: Links appear broken
- Solution: Verify FTP URLs match actual server paths; test with FTP client
This project is provided as-is for ISP use. Modify and distribute as needed for your organization.
- WCAG 2.1 Guidelines
- FTP Protocol Documentation
- HTML5 Semantic Elements
- CSS Grid Guide
- Web Accessibility
Version: 1.0
Last Updated: November 2024
Status: Production Ready