diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts
index 0fe496d3e..eb14aa95d 100644
--- a/frontend/src/app/app-routing.module.ts
+++ b/frontend/src/app/app-routing.module.ts
@@ -9,6 +9,7 @@ import { ClockMempoolComponent as ClockMempoolComponent } from './components/clo
import { AddressComponent } from './components/address/address.component';
import { MasterPageComponent } from './components/master-page/master-page.component';
import { AboutComponent } from './components/about/about.component';
+import { AcceleratorLandingComponent } from './components/accelerator-landing/accelerator-landing.component';
import { StatusViewComponent } from './components/status-view/status-view.component';
import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
import { PrivacyPolicyComponent } from './components/privacy-policy/privacy-policy.component';
@@ -271,6 +272,10 @@ let routes: Routes = [
path: 'about',
component: AboutComponent,
},
+ {
+ path: 'accelerator',
+ component: AcceleratorLandingComponent,
+ },
{
path: 'blocks',
component: BlocksList,
diff --git a/frontend/src/app/components/accelerator-landing/accelerator-landing.component.html b/frontend/src/app/components/accelerator-landing/accelerator-landing.component.html
new file mode 100644
index 000000000..d11d8e49b
--- /dev/null
+++ b/frontend/src/app/components/accelerator-landing/accelerator-landing.component.html
@@ -0,0 +1,63 @@
+
+
Transaction stuck in the mempool?
Get it confirmed quickly with Mempool Accelerator™
+
+
Get your transaction confirmed quicker through mempool.space's network of mining partners—fairly, reliably, and transparently.
+

+
+
+
+
In partnership with
+
+
+
+
+
+
+
Easy
+
Simply tell us which transaction you need accelerated, and we'll take care of the rest. No technical knowledge needed.
+
+
+
+
Fair
+
No opaque pricing—your acceleration fee is based on the fair market rate for getting a transaction included in the next block.
+
+
+
+
Transparent
+
Verify the fee estimates and block templates we use to accelerate your transaction by running The Mempool Open Source Project™ yourself.
+
+
+
+
Reliable
+
Mempool's best-in-class fee estimation—combined with its mining pool relationships—means you can expect your transaction to be confirmed fast.
+
+
+
+
+
+
What makes Mempool Accelerator™ different from other accelerators? |
+
+
+
+
+
+
How can I trust Mempool Accelerator™? |
+
+
+
+
+
+
My transaction has been stuck for days. How quickly can Mempool Accelerator™ get it confirmed? |
+
+
+
+
+
+
All of this sounds great, but is there someone I can reach out to for help first? |
+
+
+
+
+
+
+
diff --git a/frontend/src/app/components/accelerator-landing/accelerator-landing.component.scss b/frontend/src/app/components/accelerator-landing/accelerator-landing.component.scss
new file mode 100644
index 000000000..7e986055a
--- /dev/null
+++ b/frontend/src/app/components/accelerator-landing/accelerator-landing.component.scss
@@ -0,0 +1,111 @@
+#hero {
+ text-align: center;
+ margin: 60px auto;
+ width: 100%;
+ max-width: 2000px;
+}
+
+#hero p {
+ color: rgba(255, 255, 255, 0.568627451);
+}
+
+#hero img {
+ height: auto;
+ width: 50%;
+ max-width: 675px;
+}
+
+h2 {
+ margin: 30px auto;
+ font-size: 2.35rem;
+}
+
+.panel {
+ padding: 50px 80px 40px 80px;
+}
+
+.panel-lead {
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ font-size: 14px;
+}
+
+.partner.panel {
+ background-color: #1d1f31; //#1d1f31
+ text-align: center;
+}
+
+.partner.panel svg {
+ width: 150px;
+ height: auto;
+}
+
+.explainer.panel {
+ text-align: center;
+ width: 100%;
+ max-width: 2000px;
+ margin: 0 auto;
+ margin-top: 50px;
+}
+
+.explainer.panel .point {
+ text-align: center;
+ width: 460px;
+ height: 400px;
+ padding: 30px;
+ display: inline-block;
+}
+
+.explainer.panel .point .point-lead {
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ margin-top: 26px;
+ font-size: 22px;
+}
+
+.explainer.panel .point svg {
+ height: auto;
+ width: 125px;
+ background: #1d1f31;
+ border-radius: 50%;
+ padding: 20px;
+ filter: sepia(100%);
+}
+
+.panel.faq {
+ width: 100%;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding-top: 0;
+}
+
+.endpoint-container {
+ margin-bottom: 5px;
+}
+
+.endpoint-container .section-header {
+ display: block;
+ background-color: #2d3348;
+ color: #1bd8f4;
+ padding: 1rem 1.3rem;
+ font-weight: 700;
+ border-radius: .25rem;
+ font-size: 18px;
+ font-weight: 700;
+ cursor: pointer;
+}
+
+.endpoint-container .section-header:hover {
+ text-decoration: none;
+}
+
+
+
+@media (max-width: 992px) {
+
+ #hero img {
+ width: 80%;
+ }
+
+}
diff --git a/frontend/src/app/components/accelerator-landing/accelerator-landing.component.ts b/frontend/src/app/components/accelerator-landing/accelerator-landing.component.ts
new file mode 100644
index 000000000..d46f041f5
--- /dev/null
+++ b/frontend/src/app/components/accelerator-landing/accelerator-landing.component.ts
@@ -0,0 +1,72 @@
+import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, OnInit } from '@angular/core';
+import { WebsocketService } from '../../services/websocket.service';
+import { SeoService } from '../../services/seo.service';
+import { StateService } from '../../services/state.service';
+import { Observable } from 'rxjs';
+import { ApiService } from '../../services/api.service';
+import { IBackendInfo } from '../../interfaces/websocket.interface';
+import { Router, ActivatedRoute } from '@angular/router';
+import { map, tap } from 'rxjs/operators';
+import { ITranslators } from '../../interfaces/node-api.interface';
+import { DOCUMENT } from '@angular/common';
+
+@Component({
+ selector: 'app-accelerator-landing',
+ templateUrl: './accelerator-landing.component.html',
+ styleUrls: ['./accelerator-landing.component.scss'],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class AcceleratorLandingComponent implements OnInit {
+
+ constructor(
+ public stateService: StateService,
+ private router: Router,
+ private route: ActivatedRoute,
+ ) { }
+
+ ngOnInit() {
+
+ }
+
+ anchorLinkClick( event: any ) {
+ let targetId = "";
+ if( event.target.nodeName === "A" ) {
+ targetId = event.target.hash.substring(1);
+ } else {
+ let element = event.target;
+ while( element.nodeName !== "A" ) {
+ element = element.parentElement;
+ }
+ targetId = element.hash.substring(1);
+ }
+ if( this.route.snapshot.fragment === targetId && document.getElementById( targetId )) {
+ document.getElementById( targetId ).scrollIntoView();
+ }
+ this.openEndpointContainer( targetId );
+ }
+
+ openEndpointContainer( targetId ) {
+ let tabHeaderHeight = 0;
+ if (document.getElementById( targetId + "-tab-header" )) {
+ tabHeaderHeight = document.getElementById( targetId + "-tab-header" ).scrollHeight;
+ }
+ if( targetId ) {
+ const endpointContainerEl = document.querySelector( "#" + targetId );
+ const endpointContentEl = document.querySelector( "#" + targetId + " .endpoint-content" );
+ const endPointContentElHeight = endpointContentEl.clientHeight;
+
+ if( endpointContentEl.classList.contains( "open" ) ) {
+ endpointContainerEl.style.height = "auto";
+ endpointContentEl.style.top = "-10000px";
+ endpointContentEl.style.opacity = "0";
+ endpointContentEl.classList.remove( "open" );
+ } else {
+ endpointContainerEl.style.height = endPointContentElHeight + tabHeaderHeight + 28 + "px";
+ endpointContentEl.style.top = tabHeaderHeight + 28 + "px";
+ endpointContentEl.style.opacity = "1";
+ endpointContentEl.classList.add( "open" );
+ }
+ }
+ }
+
+}
diff --git a/frontend/src/resources/accelerator-hero-transparent.png b/frontend/src/resources/accelerator-hero-transparent.png
new file mode 100644
index 000000000..66d39dafe
Binary files /dev/null and b/frontend/src/resources/accelerator-hero-transparent.png differ