A bold, dark Bootstrap 6 homepage template for a construction company or general contractor, with a full-bleed site photo, a live project tracker, a filterable project portfolio and a bid request form.
How it works
The page lives in .ir-page, which pins data-bs-theme="dark" and maps the Bootstrap 6 primary role (--bs-primary-bg, --bs-primary-contrast and related tokens) to safety yellow, so btn-solid theme-primary, badges, chips, the stepper and the range all share one accent.
- Navbar:
navbar lg:navbar-expandwith a<dialog class="drawer drawer-end">for mobile. "Services" opens a.menuwithmenu-item-iconandmenu-item-description. The script keepsaria-expandedon.ir-togglerin sync and closes the drawer after a link is chosen. - Hero:
.ir-hero-bgis a decorative photo under a dark gradient overlay. The.ir-livecard shows a project in progress with a striped.progressbar, and.ir-statslists four key figures. - Projects: a
btn-groupofbtn-checkradios filters.ir-projectcards bydata-ir-sectorand announces the count in a live region. Each "View project" button carriesdata-ir-project,data-ir-meta,data-ir-scopeanddata-ir-facts; the script copies them into#ir-project-dialog(a native<dialog class="dialog dialog-lg">) and opens it withDialog.getOrCreateInstance(). - Process: a five-step
.stepperthat turns horizontal throughmd:stepper-horizontalinside a.contains-inlinewrapper. - Safety and clients:
.chipcertifications, progress meters and a Bootstrap 6.carouselof testimonials. - Bid form:
data-bs-validatevalidation, a Combobox for the project type (data-bs-name="projectType"creates a hidden input), a Datepicker for the target start and a.form-rangebudget mirrored into[data-ir-budget-out]. Submit is simulated, then#ir-toastappears.
Customization
- Change
--ir-yellowand--ir-bgin.ir-page(style.css), plus the--bs-primary-*overrides beside them, to rebrand the page. - Add or change projects by copying an
.ir-projectcard; setdata-ir-sectortocommercial,residentialorcivilto match a filter button. - Separate project facts in
data-ir-factswith|; each one becomes a tile in the dialog. - Edit the width class
ir-w68andaria-valuenowon the hero progress bar to update the "Now building" card. - Replace the
setTimeoutin the form submit handler ofscript.jswithfetch()to your CRM or email endpoint. - The photos come from Unsplash; replace them with photos of your own sites, crews and clients.
Accessibility
A skip link jumps to #ir-main. The filter is a labelled radio group, the dialog has aria-labelledby, progress bars use role="progressbar" with labels, carousel controls have hidden text labels, and the toast uses role="status". Focus has a visible yellow outline; hover effects respect prefers-reduced-motion.
Bootstrap 6 notes
Built on Bootstrap 6.0.0-alpha.1 (alpha APIs can still change). Coming from Bootstrap 5: btn-solid theme-primary replaces btn-primary, the navbar uses a Drawer instead of navbar-collapse, Dropdown is now Menu, Modal is now Dialog, the carousel uses carousel-icon-prev/-next, and Combobox, Datepicker, Chips, Stepper and Range are new built-in components. The Combobox keeps its selection after the simulated submit because alpha.1 has no reset method.