Introduction
Thank you for choosing Vellora. This documentation will guide you through every aspect of the template, from initial setup to advanced customization.
Vellora is a handcrafted, editorial-style blog and magazine website template designed for writers, publishers, and content creators who value beautiful typography and thoughtful design. Built with clean HTML5, modern CSS3, and vanilla JavaScript, it offers a complete content management experience with both public-facing pages and a fully functional admin panel.
Unlike generic blog templates, Vellora embraces an editorial aesthetic inspired by premium magazines like Monocle, Cereal, and Kinfolk. Every detail, from the warm cream background to the elegant serif headings, has been carefully considered to create a reading experience that feels intentional and human.
Who is this template for?
Vellora is ideal for personal blogs, online magazines, content publishers, writers, photographers, and anyone who values editorial design. It works beautifully for lifestyle, travel, design, food, and culture publications.
Key Features
A carefully curated set of features designed to deliver a premium editorial experience.
Editorial Typography
Fraunces serif for headings paired with Inter sans-serif for body text. Carefully tuned line-height and letter-spacing.
Warm Color Palette
Soft cream backgrounds with deep burgundy accents. No harsh whites or neon colors.
Fully Responsive
Optimized for mobile, tablet, and desktop with thoughtful breakpoints.
Admin Dashboard
Complete admin panel with posts, media, comments, categories, and settings management.
Rich Text Editor
Quill.js integration for beautiful WYSIWYG content creation.
Masonry Layout
Dynamic grid layouts powered by Masonry.js for visual variety.
Subtle Animations
AOS-powered scroll animations that enhance without distracting.
Search Overlay
Full-screen search experience with keyboard shortcuts.
Print-Ready
Optimized print styles for beautiful article printing.
Accessible
Semantic HTML, ARIA labels, and keyboard navigation throughout.
Clean Code
Well-commented, organized code following modern best practices.
Performance
Lightweight vanilla JS with CDN-loaded libraries for fast load times.
File Structure
A clear, organized structure that makes navigation and customization straightforward.
The Vellora template is organized into a flat file structure with clear naming conventions. All public pages sit at the root level alongside their shared CSS and JavaScript files, while admin pages are prefixed with admin- for easy identification.
Tip: Keep the flat structure
The template uses a flat file structure for simplicity. All HTML files reference each other directly (e.g., href="blog.html"). If you reorganize into subdirectories, you will need to update all internal links.
Installation
Get Vellora up and running in just a few simple steps.
Step-by-Step Setup
- Download and extract the template files to your desired location.
- Open
index.htmlin your browser to preview the template. - Replace placeholder content with your own articles, images, and information.
- Upload to your web server or hosting platform (Netlify, Vercel, GitHub Pages, etc.).
- Customize the theme by editing CSS variables in
style.css.
Quick Start with Local Server
For the best development experience, run a local server. Here are a few options:
# Using Python 3
python -m http.server 8000
# Using Node.js (http-server)
npx http-server
# Using PHP
php -S localhost:8000
Then open http://localhost:8000 in your browser.
Important: Use a local server
Some features (like the search overlay, mobile drawer, and external CDN resources) may not work correctly when opening HTML files directly via file://. Always use a local development server for testing.
Dependencies
External libraries loaded via CDN for optimal performance.
Vellora uses a carefully selected set of external libraries, all loaded from reliable CDNs. No build step or package manager is required.
| Library | Version | Purpose | Used In |
|---|---|---|---|
| Bootstrap | 5.3.2 | Responsive grid system | All pages |
| FontAwesome | 6.5.1 | Icon library | All pages |
| AOS | 2.3.1 | Scroll animations | Public pages |
| Masonry | 4.2.2 | Dynamic grid layouts | Blog pages |
| Quill.js | 1.3.7 | Rich text editor | Admin create post |
| Google Fonts | - | Fraunces + Inter fonts | All pages |
CDN Links Reference
All CDN links are included in each HTML file's <head> section. Here's the complete list for reference:
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..700;1,9..144,300..700&family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- Bootstrap 5.3 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- FontAwesome 6 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<!-- AOS Animations -->
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<!-- Quill.js (Admin only) -->
<link href="https://cdn.quilljs.com/1.3.7/quill.snow.css" rel="stylesheet">
<script src="https://cdn.quilljs.com/1.3.7/quill.min.js"></script>
<!-- Masonry (Blog pages) -->
<script src="https://unpkg.com/masonry-layout@4.2.2/dist/masonry.pkgd.min.js"></script>
Pages Overview
A comprehensive breakdown of all 16 pages included in the template.
Public Pages
These are the visitor-facing pages of your magazine. All public pages share the same navigation, footer, search overlay, and mobile drawer.
Magazine-style layout with featured hero article, editor's picks, masonry latest stories, trending categories, newsletter, and Instagram grid.
Full blog archive with category filters, sort options, grid/list view toggle, sidebar with popular posts and tags, and pagination.
Beautiful article layout with sticky table of contents, drop cap first letter, author bio, tags, social sharing, related articles, and comments.
Category header with description and stats, filtered blog grid, and sidebar with other categories and popular posts.
Author header with avatar, bio, social links, and stats. Grid of author's articles with sidebar showing other authors.
Hero section, mission statement with values, team members grid, timeline of milestones, and statistics section.
Two-column layout with contact form and info cards. Includes map placeholder and FAQ accordion section.
Pre-filled search bar, results count, filtered results grid, related searches, and sidebar filters.
Creative 404 with large typography, search bar, return home button, and popular articles suggestions.
Admin Pages
The admin panel provides a complete content management experience. All admin pages share the same sidebar navigation and top navbar.
Overview with stats cards, quick actions, recent posts table, and recent comments list.
Full post editor with title, Quill rich text editor, featured image upload, and sidebar with publish settings, categories, tags, and SEO.
Posts table with filters, bulk actions, status badges, and pagination. Supports search and sort.
Grid view of uploaded media with upload zone, type filters, search, and details panel.
Comments moderation with status filters, approve/reply/edit actions, and spam detection.
Categories table with add new form, parent category selection, and edit/delete actions.
Tabbed interface with General, SEO, Social, and Appearance settings including color pickers and font selectors.
Customization
Make Vellora your own by customizing colors, typography, and layout.
Color Palette
Vellora uses a warm, editorial color palette designed to feel inviting without being distracting. All colors are defined as CSS variables at the top of style.css for easy customization.
Alternative accent colors
Try these sophisticated alternatives to burgundy:
- Forest Green:
#2D4A3E(hover:#1F3529) - Deep Navy:
#1E3A5F(hover:#142842) - Warm Terracotta:
#B85C38(hover:#8F4528) - Muted Plum:
#6B4C6B(hover:#4F384F)
Typography
Vellora uses a carefully chosen font pairing that balances elegance with readability. The serif font Fraunces is used for all headings and editorial elements, while Inter handles body text and UI elements.
| Element | Font | Weight | Size |
|---|---|---|---|
| H1 | Fraunces | 500 | clamp(2.25rem, 5vw, 3.75rem) |
| H2 | Fraunces | 500 | clamp(1.875rem, 4vw, 2.75rem) |
| H3 | Fraunces | 500 | clamp(1.5rem, 3vw, 2rem) |
| Body text | Inter | 400 | 1rem (16px) |
| Article body | Fraunces | 400 | 1.1875rem (19px) |
| Small text | Inter | 400 | 0.875rem (14px) |
Changing Fonts
To change the fonts, update both the Google Fonts link in your HTML and the CSS variables:
<!-- Replace with your chosen fonts -->
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600&family=Source+Sans+Pro:wght@300;400;500;600&display=swap" rel="stylesheet">
:root {
--font-serif: 'Playfair Display', Georgia, serif;
--font-sans: 'Source Sans Pro', -apple-system, sans-serif;
}
CSS Variables Reference
All theme values are defined as CSS custom properties in style.css. Edit these to change the entire look of the site:
:root {
/* Colors */
--color-bg: #FDFBF7;
--color-bg-alt: #F0EBE1;
--color-bg-warm: #FAF7F2;
--color-text: #1A1A1A;
--color-text-muted: #6B6560;
--color-text-light: #8A847D;
--color-accent: #8B2635;
--color-accent-hover: #6F1E2A;
--color-border: #E5E1D8;
--color-white: #FFFFFF;
/* Typography */
--font-serif: 'Fraunces', 'Playfair Display', Georgia, serif;
--font-sans: 'Inter', 'Source Sans Pro', -apple-system, sans-serif;
/* Spacing */
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 1.5rem;
--space-lg: 2.5rem;
--space-xl: 4rem;
--space-xxl: 6rem;
/* Layout */
--container-max: 1280px;
--container-narrow: 780px;
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
/* Transitions */
--transition-fast: 0.2s ease;
--transition-base: 0.3s ease;
--transition-slow: 0.5s ease;
}
| Variable | Purpose | Default |
|---|---|---|
--color-bg |
Main page background | #FDFBF7 |
--color-bg-alt |
Alternate sections (newsletter, footer widgets) | #F0EBE1 |
--color-bg-warm |
Warm sections (latest stories, author bio) | #FAF7F2 |
--color-text |
Primary text color | #1A1A1A |
--color-text-muted |
Secondary text (excerpts, meta) | #6B6560 |
--color-accent |
Primary accent (links, buttons, tags) | #8B2635 |
--color-border |
Subtle borders and dividers | #E5E1D8 |
--container-max |
Maximum content width | 1280px |
--radius-md |
Default border radius | 8px |
Content Guide
How to replace placeholder content with your own articles, images, and information.
Throughout the template, you will find HTML comments marking content that should be customized. Look for comments like:
<!-- UPDATE WITH YOUR CONTENT -->
<!-- UPDATE WITH YOUR AUTHOR IMAGE -->
<!-- UPDATE WITH YOUR SOCIAL LINKS -->
<!-- UPDATE WITH YOUR ADDRESS -->
<!-- UPDATE WITH YOUR EMAIL -->
<!-- UPDATE WITH YOUR PHONE -->
<!-- UPDATE WITH YOUR INSTAGRAM HANDLE -->
<!-- UPDATE WITH YOUR TEAM -->
<!-- UPDATE WITH YOUR COPYRIGHT -->
<!-- UPDATE WITH YOUR GOOGLE MAPS EMBED -->
Replacing Images
The template uses Unsplash for placeholder images. Replace these with your own images by updating the src attribute:
<!-- Before (placeholder) -->
<img src="https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1200&h=800&fit=crop" alt="Featured article">
<!-- After (your image) -->
<img src="images/my-article.jpg" alt="Featured article">
Image optimization tips
- Use WebP format when possible for smaller file sizes
- Resize images to match their display dimensions
- Use descriptive
alttext for accessibility - Consider lazy loading for below-the-fold images
Updating Author Information
Author information appears in multiple places. Update these consistently across all pages:
- Top bar and navbar: Update the admin link if needed
- Article bylines: Update author name, avatar, and bio in each article
- Author pages: Update
author.htmlwith full bio and social links - Team section: Update team members in
about.html - Admin sidebar: Update admin avatar and name in all admin pages
Adding New Articles
To add a new article, copy an existing blog card structure and update the content:
<article class="blog-card" data-aos="fade-up">
<div class="blog-card-image-wrap">
<img src="images/your-image.jpg" alt="Article" class="blog-card-image">
<span class="blog-card-category">Your Category</span>
</div>
<div class="blog-card-content">
<h3 class="blog-card-title">
<a href="single-post.html">Your Article Title</a>
</h3>
<p class="blog-card-excerpt">Brief excerpt of your article...</p>
<div class="blog-card-meta">
<div class="blog-card-author">
<img src="images/author.jpg" alt="Author">
<strong>Author Name</strong>
</div>
<span class="blog-card-meta-dot"></span>
<span>Aug 29, 2026</span>
<span class="blog-card-meta-dot"></span>
<span>8 min read</span>
</div>
</div>
</article>
JavaScript Features
A complete reference of all JavaScript functionality in the template.
Public JavaScript (script.js)
The public JavaScript file handles all interactive features on visitor-facing pages. All code is wrapped in an IIFE to avoid polluting the global scope.
| Function | Purpose | Trigger |
|---|---|---|
initStickyNav() |
Adds shadow to navbar on scroll | Scroll event |
initMobileMenu() |
Opens/closes mobile drawer menu | Click, Escape key |
initSearchOverlay() |
Full-screen search overlay | Click, Escape key |
initAOS() |
Initializes scroll animations | Page load |
initMasonry() |
Sets up masonry grid layout | Page load, image load |
initLoadMore() |
Loads more articles on button click | Click |
initBackToTop() |
Shows/hides back-to-top button | Scroll, click |
initFAQ() |
FAQ accordion toggle | Click |
initLightbox() |
Image lightbox for article images | Click, Escape key |
initTOCScroll() |
Highlights active TOC item on scroll | Scroll |
initCommentForm() |
Comment form validation | Submit |
initNewsletterForm() |
Newsletter form validation | Submit |
initContactForm() |
Contact form validation | Submit |
initShareButtons() |
Social share functionality | Click |
initDynamicYear() |
Updates copyright year automatically | Page load |
initViewToggle() |
Grid/list view toggle on blog page | Click |
Admin JavaScript (admin-script.js)
The admin JavaScript handles all interactive features in the admin panel:
| Function | Purpose |
|---|---|
initAdminSidebar() |
Toggles admin sidebar on mobile |
initAdminDropdowns() |
Handles notification and profile dropdowns |
initAdminTabs() |
Tab switching in settings page |
initQuillEditor() |
Initializes Quill rich text editor |
initImageUpload() |
Handles featured image upload with preview |
initTagsInput() |
Tags input with autocomplete suggestions |
initMediaLibrary() |
Media selection and filtering |
initBulkActions() |
Bulk selection and actions on posts |
showAdminMessage() |
Displays toast notifications |
Keyboard Shortcuts
Vellora supports keyboard navigation for better accessibility:
- Escape - Close search overlay, mobile drawer, or lightbox
- Tab - Navigate through focusable elements
- Enter / , - Add tag in tags input
- Backspace - Remove last tag when input is empty
Admin Panel
A complete content management system built with the same editorial aesthetic.
The admin panel is fully separated from the public site with its own CSS (admin-style.css) and JavaScript (admin-script.js) files. This keeps the public site lightweight while providing powerful management features.
Accessing the Admin Panel
The admin panel is accessible via the "Admin" link in the top bar of any public page, or directly at admin-dashboard.html.
Security notice
This is a front-end template only. The admin panel has no real authentication or backend. For production use, you must:
- Add server-side authentication
- Connect to a real database
- Implement proper file upload handling
- Sanitize all user inputs
- Use HTTPS in production
Admin Panel Structure
All admin pages share the same layout structure:
- Sidebar: Fixed left navigation with logo, menu sections, and user info
- Top navbar: Search bar, notifications dropdown, and user profile dropdown
- Main content: Page-specific content with header and cards
Rich Text Editor
The post creation page uses Quill.js for rich text editing. The editor is initialized in admin-script.js with a custom toolbar configuration:
const quill = new Quill('#quill-editor', {
theme: 'snow',
placeholder: 'Start writing your story...',
modules: {
toolbar: [
[{ 'header': [1, 2, 3, false] }],
['bold', 'italic', 'underline', 'strike'],
[{ 'color': [] }, { 'background': [] }],
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
[{ 'align': [] }],
['blockquote', 'code-block'],
['link', 'image', 'video'],
['clean']
]
}
});
Admin Customization
The admin panel has its own set of CSS variables in admin-style.css. You can customize the admin theme independently:
:root {
--admin-bg: #FDFBF7;
--admin-bg-sidebar: #1A1A1A;
--admin-accent: #8B2635;
--admin-sidebar-width: 260px;
--admin-navbar-height: 64px;
}
Responsive Design
Thoughtfully designed breakpoints for every screen size.
Vellora is fully responsive with carefully chosen breakpoints that maintain the editorial feel across all devices. The template uses a mobile-first approach with progressive enhancement.
| Breakpoint | Max Width | Target Devices | Key Changes |
|---|---|---|---|
1200px |
Large desktop | Desktops & laptops | Full layout, 3-column grids |
992px |
Tablet landscape | iPad, small laptops | Mobile menu, 2-column grids, stacked sidebar |
768px |
Tablet portrait | iPad portrait | Single column layouts, simplified navigation |
480px |
Mobile | Smartphones | Compact spacing, simplified hero, 2-column Instagram |
Mobile-Specific Features
- Slide-in drawer menu with backdrop overlay
- Touch-optimized category scroll with snap points
- Collapsible admin sidebar with backdrop
- Responsive typography using
clamp()for fluid sizing - Stacked layouts for forms and grids on small screens
Testing Responsiveness
Test your site on multiple devices using browser developer tools:
- Chrome DevTools: Toggle device toolbar (Ctrl+Shift+M)
- Firefox: Responsive Design Mode (Ctrl+Shift+M)
- Safari: Responsive Design Mode (Cmd+Option+R)
- BrowserStack or LambdaTest for real device testing
Accessibility
Built with accessibility in mind for an inclusive reading experience.
Vellora follows WCAG 2.1 guidelines to ensure the template is usable by everyone. Key accessibility features include:
Semantic HTML
Proper use of header, nav, main, article, section, and footer elements.
Keyboard Navigation
All interactive elements are accessible via keyboard with visible focus states.
Color Contrast
All text meets WCAG AA contrast requirements (4.5:1 minimum).
Alt Text
All images include descriptive alt attributes for screen readers.
ARIA Labels
Buttons and icons include aria-label attributes for clarity.
Fluid Typography
Text scales smoothly with viewport size using clamp() function.
Accessibility testing tools
- Lighthouse: Built into Chrome DevTools
- axe DevTools: Browser extension for detailed audits
- WAVE: Web accessibility evaluation tool
- Screen readers: Test with NVDA (Windows), VoiceOver (Mac), or TalkBack (Android)
Browser Support
Vellora works in all modern browsers with graceful degradation for older ones.
| Browser | Minimum Version | Status |
|---|---|---|
| Chrome | 90+ | ✓ Fully supported |
| Firefox | 88+ | ✓ Fully supported |
| Safari | 14+ | ✓ Fully supported |
| Edge | 90+ | ✓ Fully supported |
| Opera | 76+ | ✓ Fully supported |
| iOS Safari | 14+ | ✓ Fully supported |
| Chrome for Android | 90+ | ✓ Fully supported |
| Internet Explorer | - | ✗ Not supported |
CSS Features Used
Vellora uses modern CSS features that are widely supported:
- CSS Grid - For layout structures
- Flexbox - For component layouts
- CSS Variables - For theming
- clamp() - For fluid typography
- aspect-ratio - For image containers
- CSS transitions - For smooth interactions
Troubleshooting
Common issues and their solutions.
Styles Not Loading
Symptom: Page appears unstyled or with default browser styles.
Solution:
- Check that
style.cssis in the same directory as your HTML files - Verify the path in the HTML:
<link rel="stylesheet" href="style.css"> - Clear browser cache (Ctrl+Shift+R or Cmd+Shift+R)
- Check browser console for 404 errors
Masonry Layout Not Working
Symptom: Blog grid items stack vertically instead of in masonry layout.
Solution:
- Ensure Masonry.js CDN is loaded before
script.js - Check browser console for JavaScript errors
- Verify images have loaded (Masonry needs image dimensions)
- Make sure the grid has the class
masonry-grid
Fonts Not Displaying
Symptom: Text appears in default system fonts instead of Fraunces/Inter.
Solution:
- Check internet connection (Google Fonts requires online access)
- Verify the Google Fonts link is in the HTML
<head> - Check browser console for font loading errors
- Try a different font from Google Fonts if needed
Images Not Showing
Symptom: Broken image icons appear instead of images.
Solution:
- Verify image paths are correct (relative or absolute)
- Check that image files exist in the specified location
- Ensure image file names match exactly (case-sensitive on some servers)
- Check file permissions on your server
Mobile Menu Not Opening
Symptom: Hamburger menu button does nothing when clicked.
Solution:
- Check browser console for JavaScript errors
- Verify
script.jsis loaded at the end of the body - Ensure the mobile drawer HTML structure is intact
- Check that the hamburger button has the class
mobile-menu-toggle
Quill Editor Not Working
Symptom: Rich text editor doesn't appear on create post page.
Solution:
- Verify both Quill CSS and JS are loaded in the correct order
- Check that the editor container has
id="quill-editor" - Ensure
admin-script.jsis loaded after Quill.js - Check browser console for initialization errors
Still having issues?
If you cannot resolve an issue, try these steps:
- Open browser developer console (F12) and check for errors
- Validate your HTML at validator.w3.org
- Test in a different browser
- Clear browser cache and cookies
- Check file encoding (should be UTF-8)
Credits & Support
Acknowledgments and resources for further help.
Third-Party Resources
Vellora makes use of the following excellent open-source resources:
- Bootstrap 5.3 - Responsive grid system by the Bootstrap team
- FontAwesome 6 - Icon library by Fonticons, Inc.
- AOS - Animate On Scroll library by Michał Sajnok
- Masonry - Cascading grid layout library by David DeSandro
- Quill.js - Rich text editor by Slab
- Google Fonts - Fraunces by Florian Karsten, Inter by Rasmus Andersson
- Unsplash - Placeholder images from the Unsplash community
- Pravatar - Placeholder avatars from pravatar.cc
Design Inspiration
The editorial aesthetic of Vellora is inspired by premium publications including:
- Monocle - Global affairs, culture, and design
- Cereal - Travel and style magazine
- Kinfolk - Slow living and intentional design
- Medium - Thoughtful long-form writing
- Substack - Independent writers and newsletters
Getting Help
If you need assistance with the template, here are some helpful resources:
Documentation
You are reading it! Refer back to specific sections as needed.
Stack Overflow
Search for specific HTML, CSS, or JavaScript questions.
MDN Web Docs
Comprehensive reference for web technologies.
Community Forums
Connect with other developers using similar tools.
License
This template is provided for your use in personal and commercial projects. Please respect the licenses of all third-party libraries and resources used.
Thank you for choosing Vellora
We hope this template helps you create a beautiful, thoughtful publication. Happy writing!