Overview
A cannabis and CBD marketplace template with vendor listings, a full delivery platform, and product discovery tools. Weedo supports multi-vendor operations with dedicated vendor detail pages, geo-location search, exclusive deals, product reviews, and a complete e-commerce flow.
What’s included
- 8 homepage variations
- Listing directory (grid, list, map, archive)
- Listing detail and vendor pages
- Geo-location and search tools
- Exclusive deals and comparison pages
- Product detail and reviews
- Shop (multiple layouts), cart, checkout
- Order detail and tracking
- Blog pages
- Login, register, and add-vendor pages
Getting Started
Thank you for choosing Weedo. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — all files are ready to use as-is.
2. Deploy to a server
Upload the entire template folder to your hosting provider using an FTP client (such as FileZilla) or your hosting control panel. Once uploaded, navigate to your domain and the template will load immediately.
3. Customise
All styling lives in assets/css/style.css. Edit colours, fonts, and spacing there. HTML pages are straightforward and well-structured — open any page in a code editor to modify content directly.
File Structure
Below is an overview of the key files and folders included in this template.
index.html / homepage-1 – 8.html | Homepage variations |
listing-archive*.html / listing-detail.html | Listing pages |
list-view.html / geo-locator.html | Search and map views |
vendor*.html | Vendor pages |
ex-deals.html / comparison.html | Deals and comparison |
product-details.html / reviews.html | Product and reviews |
shop*.html / cart.html / checkout.html | Shop and e-commerce |
order-details.html | Order detail / tracking |
blog*.html | Blog pages |
add-vendor.html / login.html / register.html | Account pages |
assets/css/ assets/js/ | Stylesheets and scripts |
Bootstrap 5 Guide
This template is built on Bootstrap 5.3.3. If you plan to add new components or customise existing ones, here is a quick reference for the most common Bootstrap 5 patterns.
Interactive attributes
Bootstrap 5 uses data-bs-* attributes. If you copy a component from an older Bootstrap 4 tutorial, update the attributes as shown:
data-bs-toggle="modal"data-bs-target="#id"data-bs-dismiss="modal"data-bs-toggle="tooltip"data-bs-toggle="modal"data-bs-target="#id"data-bs-dismiss="modal"data-bs-toggle="tooltip"Spacing & text utilities
ml-* / mr-*pl-* / pr-*text-start / text-endfloat-start / float-endms-* / me-*ps-* / pe-*text-start / text-endfloat-start / float-endCommon class changes
..form-select.close.badge-primary.form-row.mb-3.form-select.btn-close.text-bg-primary.row.g-2Accessibility (ARIA) — v1.2.0
Version v1.2.0 adds a full set of WCAG 2.1 AA accessibility enhancements. Every change is non-visual — the design, layout, and colours are identical to the previous version. Three files are touched per template: an HTML page, style.css, and the main JavaScript file.
What was added
[HTML] Skip link | A “Skip to main content” link placed as the very first element inside <body>. Sighted keyboard users can Tab to it; screen reader users hear it immediately on page load. |
[HTML] <main> landmark | <main id="main-content"> now wraps all page body content between the closing </header> and the opening <footer>. Screen readers expose this as the primary content region. |
[HTML] Image alt="" | Decorative <img> tags that were missing an alt attribute have had alt="" added. This tells screen readers to skip them. |
[CSS] Skip-link styles | The skip link is hidden off-screen by default (top:-100%) and animates into view only when focused via keyboard. Added at the bottom of assets/css/style.css. |
[CSS] :focus-visible | A 3 px outline ring appears on interactive elements only when navigated by keyboard. Mouse clicks are completely unaffected because :focus-visible never fires on pointer events. |
[JS] ARIA auto-labels | A self-contained IIFE appended to Weedo.js runs on DOMContentLoaded and assigns aria-label, role, aria-expanded, and tabindex to social links, slider arrows, nav togglers, back-to-top buttons, and close buttons. |
1. Skip Navigation Link
The skip link is the first child of <body> on every HTML page:
<a class="skip-link" href="#main-content">Skip to main content</a>
Edit the label: Change the text between the tags (e.g. translate it). The JS and CSS need no changes — only the visible text is language-specific.
Remove the skip link: Delete the <a class="skip-link"> line from every HTML page, then delete the .skip-link { … } and .skip-link:focus { … } blocks from assets/css/style.css.
2. <main> Content Landmark
Every page now wraps its body content like this:
</header>
<main id="main-content">
<!-- all page sections -->
</main>
<footer> … </footer>
Change the target ID: Update both id="main-content" on <main> and href="#main-content" on the skip link so they stay in sync.
Remove the landmark: Delete the <main id="main-content"> opening and the matching </main> closing line from each HTML page.
3. Focus Indicators (CSS)
At the bottom of assets/css/style.css:
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[role="button"]:focus-visible,
[tabindex]:focus-visible {
outline: 3px solid #0d6efd;
outline-offset: 2px;
}
Change the ring colour: Replace #0d6efd with any accessible colour that has at least 3:1 contrast ratio against the page background.
Remove focus indicators: Delete the entire /* Keyboard Focus Indicators */ block from style.css. Browser defaults will apply.
:focus, the :focus-visible pseudo-class never fires on mouse clicks — so button shapes and hover colours remain completely unaffected for pointer users.4. ARIA Labels — JavaScript Auto-Assignment
The ARIA init block at the bottom of Weedo.js runs once on DOMContentLoaded and auto-assigns attributes to interactive elements. Any element that already has the attribute in HTML is skipped — so adding the attribute manually in the HTML always takes priority.
Social icon linksaria-label="Facebook"aria-label="Instagram" … | Any <a> containing a Font Awesome social icon (e.g. fa-facebook-f, fa-instagram) that has no aria-label gets one from the icon class name.Override: Add aria-label="Visit our Facebook page" directly on the <a> tag. |
Slider arrowsrole="button"aria-label="Previous slide"aria-label="Next slide" | Targets .slick-prev / .slick-next, .owl-prev / .owl-next, .swiper-button-prev/next. Sets role, label, tabindex, and keyboard Enter/Space.Override: Add the attribute in HTML before the slider initialises. |
Nav togglersaria-label="Toggle navigation menu"aria-expanded="false" | Targets .navbar-toggler, .hamburger, .meanmenu-reveal, [data-bs-toggle="collapse"]. aria-expanded flips on every click.Override: Add aria-label="Open menu" in the HTML. |
Back-to-toparia-label="Back to top"role="button" | Targets .back-to-top, .go-top, .scroll-top, .scrollup. Non-button elements also receive role="button". |
Close buttonsaria-label="Close" | Targets .btn-close, .close, .close-btn, [data-bs-dismiss]. Gets aria-label="Close" if none already set. |
Accessibility Widget
A floating trigger button (bottom-left, wheelchair icon) that opens a side panel. Visitors can adjust font size, line spacing, contrast, colour filters, cursor size, animations, and more. Settings persist across pages via localStorage.
assets/accessibility/ and the script tag is already present before </body> on the homepage.How to add the widget to additional pages — Add one line before </body> on any HTML page:
<script src="assets/accessibility/assets/js/accessibility.js"></script>
The script self-bootstraps — it injects its own CSS and loads the panel HTML automatically. No extra <link> tag needed.
How to remove the widget — Two steps:
| HTML | Delete the <script src="assets/accessibility/assets/js/accessibility.js"></script> line from every HTML page that includes it. |
| Files | Delete the entire assets/accessibility/ folder. No other project files are modified by the widget. |
How to change the trigger position — Open assets/accessibility/assets/css/accessibility.css, find the .acw-logo-trigger rule, and adjust bottom and left:
.acw-logo-trigger {
bottom: 95px; /* distance from the bottom of the viewport */
left: 0; /* 0 = flush with the left edge */
}
How to change the panel colours — In the same CSS file, locate the :root block near the top and update the two main custom properties:
--acw-primary: #1e2a3b; /* panel header & trigger background */
--acw-accent: #00c4a1; /* active-state & highlight colour */
How to clear a user’s saved settings — Preferences are stored under the localStorage key acw-settings. To reset programmatically, add this anywhere in your page JS:
localStorage.removeItem('acw-settings');
5. Remove All ARIA Features
| HTML (all pages) | Delete the <a class="skip-link" …> line and the <main id="main-content"> / </main> pair from each .html file. |
| CSS — skip link | Find /* Skip Navigation Link */ in assets/css/style.css and delete that block plus .skip-link:focus { … }. |
| CSS — focus ring | Find /* Keyboard Focus Indicators */ in style.css and delete that block. |
| JS — ARIA init | Find /* ARIA Accessibility Enhancements */ in Weedo.js and delete the entire IIFE from (function () { to its closing })();. |
ARIA Accessibility Enhancements — it is the exact marker used in both the CSS and JS additions, making it trivial to locate and remove.Credits
This template is built using the following open-source libraries and resources.
- Bootstrap 5.3.3
- jQuery
- Popper.js
- Slick Slider
- Magnific Popup
- Font Awesome
- WOW.js
- Animate.css
- Nice Select
- Google Maps
Fonts and icon packs are loaded locally — no external CDN calls are required once the template is deployed.
Support
If you have any questions or need help with the template, please reach out through our ThemeForest profile. We aim to respond within 24–48 hours.
For licensing information visit metropolitanhost.com/licenses.