diff --git a/.dev/Dockerfile b/.dev/Dockerfile index a42f32d72..677a58775 100644 --- a/.dev/Dockerfile +++ b/.dev/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -ARG RUBY_VERSION=3.3.4 +ARG RUBY_VERSION=3.3.6 FROM ruby:$RUBY_VERSION-alpine diff --git a/postcss.config.js b/postcss.config.js index 94c8efdba..e3575b636 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -26,7 +26,7 @@ const purgecss = require("@fullhuman/postcss-purgecss")({ ], greedy: [ - /^swiper-/, /^is-/, /^has-/, /^js-/, /^fl-builder-content/, /^fl-col/, /^fl-node/, /^technologies-component/, /^footer-component/ + /^swiper-/, /^is-/, /^has-/, /^js-/, /^fl-builder-content/, /^fl-col/, /^fl-node/, /^technologies-component/, /^footer-component/, /^use-cases/ ] }, }) diff --git a/test/fixtures/screenshots/linux/desktop/blog/index.png b/test/fixtures/screenshots/linux/desktop/blog/index.png index 8eaa78c8c..3a1f398e0 100644 Binary files a/test/fixtures/screenshots/linux/desktop/blog/index.png and b/test/fixtures/screenshots/linux/desktop/blog/index.png differ diff --git a/test/fixtures/screenshots/linux/desktop/homepage/_use-cases.png b/test/fixtures/screenshots/linux/desktop/homepage/_use-cases.png index 68fa468a5..14d1c2e29 100644 Binary files a/test/fixtures/screenshots/linux/desktop/homepage/_use-cases.png and b/test/fixtures/screenshots/linux/desktop/homepage/_use-cases.png differ diff --git a/test/fixtures/screenshots/macos/desktop/blog/index.png b/test/fixtures/screenshots/macos/desktop/blog/index.png index 860c35a1b..07be693a7 100644 Binary files a/test/fixtures/screenshots/macos/desktop/blog/index.png and b/test/fixtures/screenshots/macos/desktop/blog/index.png differ diff --git a/test/fixtures/screenshots/macos/desktop/blog/index/_pagination.png b/test/fixtures/screenshots/macos/desktop/blog/index/_pagination.png index 31b06f8a8..165dc098c 100644 Binary files a/test/fixtures/screenshots/macos/desktop/blog/index/_pagination.png and b/test/fixtures/screenshots/macos/desktop/blog/index/_pagination.png differ diff --git a/test/fixtures/screenshots/macos/desktop/homepage/_use-cases.png b/test/fixtures/screenshots/macos/desktop/homepage/_use-cases.png index 7c43c62d8..9c8dfd9fa 100644 Binary files a/test/fixtures/screenshots/macos/desktop/homepage/_use-cases.png and b/test/fixtures/screenshots/macos/desktop/homepage/_use-cases.png differ diff --git a/test/fixtures/screenshots/macos/mobile/blog/index.png b/test/fixtures/screenshots/macos/mobile/blog/index.png index c8aef93c4..071370f33 100644 Binary files a/test/fixtures/screenshots/macos/mobile/blog/index.png and b/test/fixtures/screenshots/macos/mobile/blog/index.png differ diff --git a/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu.png b/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu.png index d42798f8c..3c2927086 100644 Binary files a/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu.png and b/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu.png differ diff --git a/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu/services.png b/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu/services.png index 084136a50..bc6f5ef86 100644 Binary files a/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu/services.png and b/test/fixtures/screenshots/macos/mobile/nav/hamburger_menu/services.png differ diff --git a/themes/beaver/assets/css/use-cases-dynamic.css b/themes/beaver/assets/css/use-cases-dynamic.css new file mode 100644 index 000000000..4fbaf47f6 --- /dev/null +++ b/themes/beaver/assets/css/use-cases-dynamic.css @@ -0,0 +1,172 @@ +.use-cases > .heading { + color: #1a8cff; + font-weight: 600; + text-align: center; + margin-bottom: 30px; +} + +.use-cases .subheading { + font-size: 60px; + color: #121212; + margin-left: 200px; + margin-right: 200px; + text-align: center; +} + +@media (max-width: 1115px) { + .use-cases .subheading { + margin-left: 50px; + margin-right: 50px + } +} + +@media (max-width: 860px) { + .use-cases .subheading { + margin-left: 0; + margin-right: 0; + margin-top: 10px + } +} + +.use-cases .description { + margin-left: 300px; + margin-right: 300px; + margin-top: 20px; + text-align: center; +} + +@media (max-width: 1115px) { + .use-cases .description { + margin-left: 50px; + margin-right: 50px + } +} + + + +.use-cases .tab-title { + display: none; +} + +@media (min-width: 860px) { + .use-cases .tab-title { + display: block; + } + .use-cases .tab-title-mobile { + display: none; + } +} + +.use-cases .tabs-container { + display: flex; + flex-direction: column; + margin-top: 60px; +} + +.use-cases .tab-title, .use-cases .tab-title-mobile { + color: #121212; + border: none; + border-radius: 14px; + padding: 28px 35px; + font-size: 20px; + font-weight: 700; + cursor: pointer; +} + +.use-cases .tab-title:hover, .use-cases .tab-title:focus, .use-cases .tab-title[aria-selected="true"], .use-cases .tab-title-mobile { + background-color: #f5f6f8; +} + +.use-cases .tab-title-mobile { + border-radius: 0; + padding: 20px; + font-size: 16px; + border-bottom: 2px solid #e7e7e7; + margin: 0; +} + +.use-cases .tab-title-mobile:last-child { + border-bottom: none; +} + +@media (max-width: 860px) { + .use-cases .description { + margin-left: 0; + margin-right: 0; + margin-top: 15px; + } +} + +@media (min-width: 860px) { + .use-cases .tabs { + width: 43%; + } + + .use-cases .tabs-container { + flex-direction: row; + } +} + +.use-cases .tab-panels { + flex: 1; + padding-left: 100px +} + +@media (max-width: 1115px) { + .use-cases .tab-panels { + padding-left: 50px + } +} + +@media (max-width: 860px) { + .use-cases .tab-panels { + padding-left: 0; + } + + .use-cases .tab-panel { + padding: 20px 0; + } +} + +.use-cases .tab-panel .heading { + font-size: 45px; + margin-bottom: 30px; + margin-top: 0; +} + +@media (max-width: 860px) { + .use-cases .tab-panel .heading { + font-size: 30px; + margin-bottom: 20px; + } +} + + +.use-cases .tab-panel .item { + margin-bottom: 10px; +} + +.use-cases .tab-panel .list { + list-style: none; + margin-bottom: 36px; + margin-top: 0; + padding-left: 0; +} + +.use-cases .tab-panel .item { + background-image: url({{ (resources.Get "img/icons/theme/homepage_tick_circle.svg" | fingerprint).RelPermalink }}); + background-repeat: no-repeat; + background-position: 0 50%; /* Center the bullet vertically */ + background-size: 24px 24px; /* Size of the bullet */ + padding-left: 36px; /* Space for the bullet */ +} + +.use-cases .action-button { + background-color: #007af4; + font-weight: 700; + padding: 12px 25px; + text-decoration: none; + border-radius: 25px; + color: #fff; + display: inline-block; +} diff --git a/themes/beaver/assets/js/587.js b/themes/beaver/assets/js/587.js deleted file mode 100644 index 3beae24ad..000000000 --- a/themes/beaver/assets/js/587.js +++ /dev/null @@ -1,36 +0,0 @@ -document.addEventListener("DOMContentLoaded", function () { - if (!window.SDB) { - SDB = {}; - } - /* - * Application Init, everything starts here - * - */ - SDB.App = (function () { - return { - init: function () { - // Basic Clickable for .hover-box class - $(document).on( - "click", - "body:not(.fl-builder-edit) .hover-box .fl-col-content", - function (event) { - window.location = $(this).find("a").attr("href"); - return false; - }, - ); - - // Basic Clickable for post content - $(document).on( - "click", - "body:not(.fl-builder-edit) .jt-clickable .pp-content-post", - function (event) { - window.location = $(this).find("a").attr("href"); - return false; - }, - ); - }, // CLOSE INIT FUNCTION - }; - })(); - - SDB.App.init(); -}); diff --git a/themes/beaver/assets/js/bb-theme/pp_advanced_tabs.js b/themes/beaver/assets/js/bb-theme/pp_advanced_tabs.js deleted file mode 100644 index 51b899cd6..000000000 --- a/themes/beaver/assets/js/bb-theme/pp_advanced_tabs.js +++ /dev/null @@ -1,221 +0,0 @@ -PPAdvancedTabs = function (settings) { - this.settings = settings; - this.nodeClass = ""; - this._init(); -}; - -PPAdvancedTabs.prototype = { - settings: {}, - nodeClass: "", - - _init: function () { - $(this.nodeClass + " .pp-tabs-labels .pp-tabs-label").on( - "click keyup", - this._labelClick.bind(this), - ); - $(this.nodeClass + " .pp-tabs-panels .pp-tabs-label").on( - "click", - this._responsiveLabelClick.bind(this), - ); - $(this.nodeClass + " .pp-tabs-labels .pp-tabs-label.pp-tab-active").attr( - "tabindex", - "0", - ); - this._responsiveCollapsed(); - this._bindEvents(); - }, - _bindEvents: function () { - const tabs = $(this.nodeClass + " .pp-tabs-labels .pp-tabs-label"); - let tabFocus = 0; - $(this.nodeClass + " .pp-tabs-labels").on("keydown", function (e) { - const keyCode = e.keyCode || e.which; - if (38 === keyCode || 40 === keyCode) { - e.preventDefault(); - tabs[tabFocus].setAttribute("tabindex", -1); - if (40 === keyCode) { - tabFocus++; - if (tabFocus >= tabs.length) { - tabFocus = 0; - } - } else if (38 === keyCode) { - tabFocus--; - if (tabFocus < 0) { - tabFocus = tabs.length - 1; - } - } - } - tabs[tabFocus].setAttribute("tabindex", 0); - tabs[tabFocus].focus(); - }); - if ($(this.nodeClass + " .pp-tabs-vertical").length > 0) { - this._resize(); - $(window).off("resize" + this.nodeClass); - $(window).on("resize" + this.nodeClass, this._resize.bind(this)); - } - this._hashChange(); - $(window).on("hashchange", this._hashChange.bind(this)); - }, - _hashChange: function () { - if ( - location.hash && - -1 === location.hash.search("#!") && - $(location.hash).length > 0 - ) { - const element = $(location.hash + ".pp-tabs-label"); - if (element && element.length > 0) { - const header = $(".fl-theme-builder-header-sticky"); - const offset = header.length > 0 ? header.height() + 32 : 120; - location.href = "#"; - $("html, body").animate( - { scrollTop: element.parents(".pp-tabs").offset().top - offset }, - 50, - function () { - if (!element.hasClass("pp-tab-active")) { - element.trigger("click"); - } - }, - ); - } - } - }, - _labelClick: function (e) { - const label = $(e.target).closest(".pp-tabs-label"), - index = label.data("index"), - wrap = label.closest(".pp-tabs"); - const showContent = - "click" === e.type || - ("keyup" === e.type && (13 === e.keyCode || 13 === e.which)); - if (!showContent) { - return; - } - label.siblings().attr("aria-selected", false).attr("tabindex", "-1"); - label.attr("aria-selected", true).attr("tabindex", "0").trigger("focus"); - if (wrap.hasClass("pp-tabs-vertical")) { - const header = $(".fl-theme-builder-header-sticky"); - const offset = header.length > 0 ? header.height() + 32 : 120; - $("html, body").animate({ scrollTop: wrap.offset().top - offset }, 500); - } - wrap - .find(".pp-tabs-labels:first > .pp-tab-active") - .removeClass("pp-tab-active"); - wrap - .find(".pp-tabs-panels:first > .pp-tabs-panel > .pp-tab-active") - .removeClass("pp-tab-active"); - wrap - .find(".pp-tabs-panels:first > .pp-tabs-panel > .pp-tabs-label") - .removeClass("pp-tab-active"); - wrap - .find( - '.pp-tabs-labels:first > .pp-tabs-label[data-index="' + index + '"]', - ) - .addClass("pp-tab-active"); - wrap - .find( - '.pp-tabs-panels:first > .pp-tabs-panel > .pp-tabs-panel-content[data-index="' + - index + - '"]', - ) - .addClass("pp-tab-active"); - wrap - .find( - '.pp-tabs-panels:first > .pp-tabs-panel > .pp-tabs-label[data-index="' + - index + - '"]', - ) - .addClass("pp-tab-active"); - $(document).trigger("pp-tabs-switched", [ - wrap.find('.pp-tabs-panel-content[data-index="' + index + '"]'), - ]); - }, - _responsiveLabelClick: function (e) { - const label = $(e.target).closest(".pp-tabs-label"), - wrap = label.closest(".pp-tabs"), - index = label.data("index"), - content = label.siblings(".pp-tabs-panel-content"), - activeContent = wrap.find(".pp-tabs-panel-content.pp-tab-active"), - activeIndex = activeContent.data("index"), - allIcons = wrap.find(".pp-tabs-label .fa"), - icon = label.find(".fa"); - if (index == activeIndex) { - activeContent.slideUp("normal"); - activeContent.removeClass("pp-tab-active"); - $(this.nodeClass + " .pp-tabs-panels .pp-tabs-label").removeClass( - "pp-tab-active", - ); - wrap.removeClass("pp-tabs-animation"); - return; - } - if (wrap.hasClass("pp-tabs-animation")) { - return; - } - wrap.addClass("pp-tabs-animation"); - activeContent.slideUp("normal"); - content.slideDown("normal", function () { - wrap.find(".pp-tab-active").removeClass("pp-tab-active"); - wrap - .find('.pp-tabs-label[data-index="' + index + '"]') - .addClass("pp-tab-active"); - content.addClass("pp-tab-active"); - wrap.removeClass("pp-tabs-animation"); - if ( - label.offset().top < $(window).scrollTop() + 100 && - !wrap.hasClass("pp-tabs-no-scroll") - ) { - $("html, body").animate( - { scrollTop: label.offset().top - 100 }, - 500, - "swing", - ); - } - $(document).trigger("pp-tabs-switched", [content]); - }); - }, - _resize: function () { - $(this.nodeClass + " .pp-tabs-vertical").each( - this._resizeVertical.bind(this), - ); - }, - _resizeVertical: function (e) { - const wrap = $(this.nodeClass + " .pp-tabs-vertical"), - labels = wrap.find(".pp-tabs-labels"), - panels = wrap.find(".pp-tabs-panels"); - panels.css("min-height", labels.height() + "px"); - }, - _gridLayoutMatchHeight: function () { - let highestBox = 0; - let contentHeight = 0; - $(this.nodeClass) - .find(".pp-equal-height .pp-content-post") - .css("height", "") - .each(function () { - if ($(this).height() > highestBox) { - highestBox = $(this).height(); - contentHeight = $(this).find(".pp-content-post-data").outerHeight(); - } - }); - $(this.nodeClass) - .find(".pp-equal-height .pp-content-post") - .height(highestBox); - }, - _responsiveCollapsed: function () { - if ($(window).innerWidth() < 769) { - $(this.nodeClass + " .pp-tabs-panels").css("visibility", "visible"); - } - }, -}; - -document.addEventListener("DOMContentLoaded", function () { - new PPAdvancedTabs({}); - - if ($(window).width() > 768) { - $(".pp-tabs-vertical .pp-tabs-panel-content").css( - "min-height", - $(".pp-tabs-vertical .pp-tabs-labels").outerHeight() + "px", - ); - } - if ($(window).width() <= 768) { - $(".pp-tabs-label .pp-tab-close").on("click", function () { - $(this).parents(".pp-tabs-label").removeClass("pp-tab-active"); - }); - } -}); diff --git a/themes/beaver/assets/js/tabs.js b/themes/beaver/assets/js/tabs.js new file mode 100644 index 000000000..c7562f5e7 --- /dev/null +++ b/themes/beaver/assets/js/tabs.js @@ -0,0 +1,46 @@ +document.querySelectorAll('.js-tab').forEach(el => { + const container = el.closest('.js-tabs-container'); + el.onclick = function (e) { + const targetTab = e.target; + const panel = document.getElementById(targetTab.getAttribute('aria-controls')); + container.querySelectorAll(".tab-panel").forEach(panel => panel.hidden = true); + panel.hidden = false; + container.querySelectorAll(".js-tab").forEach(tabTitle => tabTitle.setAttribute('aria-selected', 'false')); + targetTab.setAttribute('aria-selected', 'true'); + if (window.innerWidth < 860) { + panel.scrollIntoView({behavior: 'smooth', block: 'center'}); + panel.focus(); + } + } +}); + +//for keyboard +document.querySelectorAll('.tabs').forEach(tabList => { + const tabs = tabList.querySelectorAll('.js-tab'); + let tabFocus = 0; + tabList.addEventListener("keydown", (e) => { + if (e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + tabs[tabFocus].setAttribute("tabindex", -1); + if (e.key === "ArrowDown") { + tabFocus++; + // If we're at the end, go to the start + if (tabFocus >= tabs.length) { + tabFocus = 0; + } + // Move left + } else if (e.key === "ArrowUp") { + tabFocus--; + // If we're at the start, move to the end + if (tabFocus < 0) { + tabFocus = tabs.length - 1; + } + } else if (e.key === 'Enter' || e.key === ' ') { + tabs[tabFocus].click(); + } + + tabs[tabFocus].setAttribute("tabindex", 0); + tabs[tabFocus].focus(); + } + }); +}); diff --git a/themes/beaver/layouts/page/index.html b/themes/beaver/layouts/page/index.html index cf70cb8de..b6796a311 100644 --- a/themes/beaver/layouts/page/index.html +++ b/themes/beaver/layouts/page/index.html @@ -18,6 +18,7 @@ } {{- $dynamicCSS := resources.Get "css/dynamic-404-590.css" | resources.ExecuteAsTemplate "css/dynamic.css" . }} {{- $dynamicCSS586 := resources.Get "css/586-dynamic.css" | resources.ExecuteAsTemplate "css/dynamic586.css" . }} +{{- $dynamicCSSUseCases := resources.Get "css/use-cases-dynamic.css" | resources.ExecuteAsTemplate "css/use-cases-dynamic.css" . }} {{ $nonCriticalCSS := slice (resources.Get "css/companies.css") @@ -30,6 +31,7 @@ $dynamicCSS586 (resources.Get "css/586.css") (resources.Get "css/technologies.css") + $dynamicCSSUseCases | resources.Concat "css/_non_critical_homepage.css" | postCSS | minify | fingerprint | resources.PostProcess }} @@ -37,6 +39,15 @@ loadCSS("{{ $nonCriticalCSS.RelPermalink }}") }) + +{{ $tabs := slice +(resources.Get "js/tabs.js") +| resources.Concat "js/_tabs.js" +| js.Build (dict "minify" true) | minify | fingerprint | resources.PostProcess +}} + + + {{ partial "header/json-ld-company.html" . }} {{ end }} @@ -632,7 +643,7 @@

We Simplify Costs

-
+
@@ -661,281 +672,9 @@

-
-
-
-
-
-
-

USE CASES

-
-
-
-
-
-

- Delivering positive technology outcomes -

-
-
-
-
-
-

We are committed to helping companies confront & conquer new software development challenges, no matter how complicated.

-
-
-
-
-
-
-
- - - - - - -
-
-
-
-
-
-
-
Startup MVP Prototyping & Development
-
-
- - -
-
-
-
-

Startup MVP Prototyping & Development

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - - With the emergence of lean methodologies, software startups are finding creative, cost-effective ways to go-to-market on a budget.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Instead of enduring big expenses & risks to build a full product, startups can use prototypes and Minimally-Viable Products (MVP) as a low-cost way to gather customer feedback and iterate on the overall product vision.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - We’ve helped startups across a variety of industries go from zero to go-to-market at a fraction of the costs with prototyping & MVP development services.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Salvage an Existing Project
-
-
- - -
-
-
-
-

Salvage an Existing Project

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Software products often get handled by many people, teams, and leaders as it ages, which can make it harder to maintain, repair, and improve.
  • -
  • + {{ partial "page/use-cases.html" (dict "addHeadline" true) }} - {{ partial "svg" "theme/homepage_tick_circle" }} - Without the right best practices & documentation, software codebases can become impossible to use without consultants or additional technical resources.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - We can help transform the long-term stability of your software product, providing the visibility, clarity, and control you need to get your project on track.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Emergency CTO Leadership
-
-
- - -
-
-
-
-

Emergency CTO Leadership

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Technology & software products need constant supervision from someone with the knowledge to reduce errors, spot problems, & prevent downtime.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - When a company loses technical leadership or reaches unfamiliar territory, it’s critical to find the right technical expertise as soon as possible.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to a fractional CTO, you can maintain best practices, hire developers faster, & streamline operations at a fraction of the cost of a full-time CTO
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Empower an Existing Engineering Team
-
-
- - -
-
-
-
-

Empower an Existing Engineering Team

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Even a talented development team can become overwhelmed by customer complaints, technical issues, or aggressive deadlines.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - When a core development team is rushed or overworked, companies risk losing control over product quality & missing critical software errors.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can help support your core team and make it easier for them to adapt as the environment changes.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Accelerate Development & Maximize Capacity
-
-
- - -
-
-
-
-

Accelerate Development & Maximize Capacity

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Software development is a delicate balancing act between speed & quality, which can be difficult to achieve.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Any team can build a high-quality product with enough time, but very few teams can deliver a high level of quality at a competitive pace.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can accelerate development speed while maintaining product quality.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Automate Product QA & Testing
-
-
- - -
-
-
-
-

Automate Product QA & Testing

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - The larger a software product grows, the harder it becomes to maintain, improve, and optimize it over time without issues emerging.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Without an effective system for ongoing product testing, it’s easy for hidden issues to devolve into an uncontrollable, unsustainable situation.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With our fully-managed software testing & QA services, you can accelerate development cycles while minimizing costly mistakes & product errors.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
-
{{ partial "page/testimonials.html" . }}
diff --git a/themes/beaver/layouts/page/services.html b/themes/beaver/layouts/page/services.html index 7cf39801f..363150d9e 100644 --- a/themes/beaver/layouts/page/services.html +++ b/themes/beaver/layouts/page/services.html @@ -1,10 +1,24 @@ {{ define "header" }} {{ partial "header/critical/services.html" . }} {{- $dynamicCSS586 := resources.Get "css/586-dynamic.css" | resources.ExecuteAsTemplate "css/dynamic586.css" . }} -{{- $CSS := slice (resources.Get "css/737-layout.css") (resources.Get "css/bf72bba397177a0376baed325bffdc75-layout-bundle.css") $dynamicCSS586 (resources.Get "css/586.css") (resources.Get "css/base-4.min.css") (resources.Get "css/style.css") (resources.Get "css/skin-65eda28877e04.css") (resources.Get "css/technologies.css") (resources.Get "css/footer.css") | resources.Concat "css/services.css" | postCSS | minify | fingerprint | resources.PostProcess}} +{{- $dynamicCSSUseCases := resources.Get "css/use-cases-dynamic.css" | resources.ExecuteAsTemplate "css/use-cases-dynamic.css" . }} + +{{- $CSS := slice (resources.Get "css/737-layout.css") (resources.Get "css/bf72bba397177a0376baed325bffdc75-layout-bundle.css") $dynamicCSS586 (resources.Get "css/586.css") (resources.Get "css/base-4.min.css") (resources.Get "css/style.css") (resources.Get "css/skin-65eda28877e04.css") (resources.Get "css/technologies.css") (resources.Get "css/footer.css") $dynamicCSSUseCases | resources.Concat "css/services.css" | postCSS | minify | fingerprint | resources.PostProcess}} {{ end }} + + +{{ define "footer" }} +{{ $tabs := slice +(resources.Get "js/tabs.js") +| resources.Concat "js/_tabs.js" +| js.Build (dict "minify" true) | minify | fingerprint | resources.PostProcess +}} + +{{ end }} + + {{ define "main" }}
@@ -262,265 +276,9 @@

-
-
-
-
-
-
-

USE CASES

-
-
-
-
-
-

- Delivering positive technology outcomes -

-
-
-
-
-
-

We are committed to helping companies confront & conquer new software development challenges, no matter how complicated.

-
-
-
-
-
-
-
- - - - - - -
-
-
-
-
-
-
-
Startup MVP Prototyping & Development
-
-
- - -
-
-
-
-

Startup MVP Prototyping & Development

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - With the emergence of lean methodologies, software startups are finding creative, cost-effective ways to go-to-market on a budget.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Instead of enduring big expenses & risks to build a full product, startups can use prototypes and Minimally-Viable Products (MVP) as a low-cost way to gather customer feedback and iterate on the overall product vision.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - We’ve helped startups across a variety of industries go from zero to go-to-market at a fraction of the costs with prototyping & MVP development services.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
-
Emergency CTO Leadership
-
-
- - -
-
-
-
-

Emergency CTO Leadership

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Technology & software products need constant supervision from someone with the knowledge to reduce errors, spot problems, & prevent downtime.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - When a company loses technical leadership or reaches unfamiliar territory, it’s critical to find the right technical expertise as soon as possible.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to a fractional CTO, you can maintain best practices, hire developers faster, & streamline operations at a fraction of the cost of a full-time CTO
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Empower an Existing Engineering Team
-
-
- - -
-
-
-
-

Empower an Existing Engineering Team

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Even a talented development team can become overwhelmed by customer complaints, technical issues, or aggressive deadlines.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - When a core development team is rushed or overworked, companies risk losing control over product quality & missing critical software errors.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can help support your core team and make it easier for them to adapt as the environment changes.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Accelerate Development & Maximize Capacity
-
-
- - -
-
-
-
-

Accelerate Development & Maximize Capacity

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Software development is a delicate balancing act between speed & quality, which can be difficult to achieve.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Any team can build a high-quality product with enough time, but very few teams can deliver a high level of quality at a competitive pace.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can accelerate development speed while maintaining product quality.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Automate Product QA & Testing
-
-
- - -
-
-
-
-

Automate Product QA & Testing

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - The larger a software product grows, the harder it becomes to maintain, improve, and optimize it over time without issues emerging.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Without an effective system for ongoing product testing, it’s easy for hidden issues to devolve into an uncontrollable, unsustainable situation.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - With our fully-managed software testing & QA services, you can accelerate development cycles while minimizing costly mistakes & product errors.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
-
+ + + {{ partial "page/use-cases.html" (dict "addHeadline" true) }} {{ partial "page/testimonials.html" . }}
@@ -562,6 +320,7 @@

+
diff --git a/themes/beaver/layouts/page/use-cases.html b/themes/beaver/layouts/page/use-cases.html index b6cf18dc9..2ae96ba7b 100644 --- a/themes/beaver/layouts/page/use-cases.html +++ b/themes/beaver/layouts/page/use-cases.html @@ -1,10 +1,22 @@ {{ define "header" }} {{ partial "header/critical/use-cases.html" . }} {{- $dynamicCSS586 := resources.Get "css/586-dynamic.css" | resources.ExecuteAsTemplate "css/dynamic586.css" . }} -{{- $CSS := slice (resources.Get "css/3021-layout.css") (resources.Get "css/bf72bba397177a0376baed325bffdc75-layout-bundle.css") $dynamicCSS586 (resources.Get "css/586.css") (resources.Get "css/base-4.min.css") (resources.Get "css/style.css") (resources.Get "css/skin-65eda28877e04.css") (resources.Get "css/technologies.css") (resources.Get "css/footer.css") | resources.Concat "css/use-cases.css" | postCSS | minify | fingerprint | resources.PostProcess}} +{{- $dynamicCSSUseCases := resources.Get "css/use-cases-dynamic.css" | resources.ExecuteAsTemplate "css/use-cases-dynamic.css" . }} + +{{- $CSS := slice (resources.Get "css/3021-layout.css") (resources.Get "css/bf72bba397177a0376baed325bffdc75-layout-bundle.css") $dynamicCSS586 (resources.Get "css/586.css") (resources.Get "css/base-4.min.css") (resources.Get "css/style.css") (resources.Get "css/skin-65eda28877e04.css") (resources.Get "css/technologies.css") (resources.Get "css/footer.css") $dynamicCSSUseCases | resources.Concat "css/use-cases.css" | postCSS | minify | fingerprint | resources.PostProcess}} {{ end }} + +{{ define "footer" }} +{{ $tabs := slice +(resources.Get "js/tabs.js") +| resources.Concat "js/_tabs.js" +| js.Build (dict "minify" true) | minify | fingerprint | resources.PostProcess +}} + +{{ end }} + {{ define "main" }}
@@ -14,278 +26,11 @@
-
-
-
-
-
-
-
-

- {{ .Params.headline }} -

-
-
-
-
-
-

{{ .Params.excerpt }}

-
-
-
-
-
-
-
- - - - - - -
-
-
-
-
-
-
-
Startup MVP Prototyping & Development
-
-
- - -
-
-
-
-

Startup MVP Prototyping & Development

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - With the emergence of lean methodologies, software startups are finding creative, cost-effective ways to go-to-market on a budget.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - - Instead of enduring big expenses & risks to build a full product, startups can use prototypes and Minimally-Viable Products (MVP) as a low-cost way to gather customer feedback and iterate on the overall product vision.
  • -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - - We’ve helped startups across a variety of industries go from zero to go-to-market at a fraction of the costs with prototyping & MVP development services.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Salvage an Existing Project
-
-
- - -
-
-
-
-

Salvage an Existing Project

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Software products often get handled by many people, teams, and leaders as it ages, which can make it harder to maintain, repair, and improve.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Without the right best practices & documentation, software codebases can become impossible to use without consultants or additional technical resources.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - We can help transform the long-term stability of your software product, providing the visibility, clarity, and control you need to get your project on track.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Emergency CTO Leadership
-
-
- - -
-
-
-
-

Emergency CTO Leadership

-
    -
  • - {{ partial "svg" "theme/homepage_tick_circle" }} - Technology & software products need constant supervision from someone with the knowledge to reduce errors, spot problems, & prevent downtime.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - When a company loses technical leadership or reaches unfamiliar territory, it’s critical to find the right technical expertise as soon as possible.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to a fractional CTO, you can maintain best practices, hire developers faster, & streamline operations at a fraction of the cost of a full-time CTO
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Empower an Existing Engineering Team
-
-
- - -
-
-
-
-

Empower an Existing Engineering Team

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Even a talented development team can become overwhelmed by customer complaints, technical issues, or aggressive deadlines.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - When a core development team is rushed or overworked, companies risk losing control over product quality & missing critical software errors.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can help support your core team and make it easier for them to adapt as the environment changes.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Accelerate Development & Maximize Capacity
-
-
- - -
-
-
-
-

Accelerate Development & Maximize Capacity

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Software development is a delicate balancing act between speed & quality, which can be difficult to achieve.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Any team can build a high-quality product with enough time, but very few teams can deliver a high level of quality at a competitive pace.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With access to on-demand engineering resources, you can accelerate development speed while maintaining product quality.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
Automate Product QA & Testing
-
-
- - -
-
-
-
-

Automate Product QA & Testing

-
    -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - The larger a software product grows, the harder it becomes to maintain, improve, and optimize it over time without issues emerging.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - Without an effective system for ongoing product testing, it’s easy for hidden issues to devolve into an uncontrollable, unsustainable situation.
  • -
  • - - {{ partial "svg" "theme/homepage_tick_circle" }} - With our fully-managed software testing & QA services, you can accelerate development cycles while minimizing costly mistakes & product errors.
  • -
-

Learn More

-
-
-
-
-
-
-
-
-
-
-
+
+
+ {{ partial "page/use-cases.html" (dict "addHeadline" false) }} +
diff --git a/themes/beaver/layouts/partials/page/site-scripts.html b/themes/beaver/layouts/partials/page/site-scripts.html index c6717e2e3..3285fab41 100644 --- a/themes/beaver/layouts/partials/page/site-scripts.html +++ b/themes/beaver/layouts/partials/page/site-scripts.html @@ -1,13 +1,7 @@ - - {{ $js := slice (resources.Get "js/navigation.js") - (resources.Get "js/587.js") - (resources.Get "js/bb-theme/pp_advanced_tabs.js") | resources.Concat "js/_site.js" | js.Build (dict "minify" true) | minify | fingerprint | resources.PostProcess }} - diff --git a/themes/beaver/layouts/partials/page/use-cases.html b/themes/beaver/layouts/partials/page/use-cases.html new file mode 100644 index 000000000..e99728dc7 --- /dev/null +++ b/themes/beaver/layouts/partials/page/use-cases.html @@ -0,0 +1,139 @@ +{{ $addHeadline := .addHeadline | default true }} + +
+{{ if $addHeadline }} +

USE CASES

+{{ end }} +

Delivering positive technology outcomes

+

We are committed to helping companies confront & conquer new software development challenges, no matter how complicated.

+ +
+
+ + + + + + +
+ +
+ + + + +
+

Startup MVP Prototyping & Development

+
    +
  • + With the emergence of lean methodologies, software startups are finding creative, cost-effective ways to go-to-market on a budget.
  • +
  • + Instead of enduring big expenses & risks to build a full product, startups can use prototypes and Minimally-Viable Products (MVP) as a low-cost way to gather customer feedback and iterate on the overall product vision.
  • +
  • + We’ve helped startups across a variety of industries go from zero to go-to-market at a fraction of the costs with prototyping & MVP development services.
  • +
+ Learn More +
+ + + + + + + + + + + + + + + + + + + + + +
+
+