Compare commits
No commits in common. "master" and "original-version" have entirely different histories.
master
...
original-v
10
.eslintrc
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
parser: "babel-eslint",
|
|
||||||
"plugins": [
|
|
||||||
"react"
|
|
||||||
],
|
|
||||||
"rules": {
|
|
||||||
"max-len": [1, 120, 2, {ignoreComments: true}]
|
|
||||||
},
|
|
||||||
"extends": ["eslint:recommended", "plugin:react/recommended"]
|
|
||||||
}
|
|
32
.gitignore
vendored
|
@ -1,24 +1,10 @@
|
||||||
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
*.key
|
||||||
|
*.crt
|
||||||
# dependencies
|
*.pem
|
||||||
/node_modules
|
client/src/static/disabled/
|
||||||
|
node_modules/
|
||||||
# testing
|
outputDir/
|
||||||
/coverage
|
client/package-lock.json
|
||||||
|
|
||||||
# production
|
|
||||||
/build
|
|
||||||
|
|
||||||
# misc
|
|
||||||
.DS_Store
|
|
||||||
.env.local
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
.idea
|
|
||||||
|
|
||||||
package-lock.json
|
package-lock.json
|
||||||
yarn.lock
|
public/img/.tinypng-sigs
|
||||||
npm-debug.log*
|
acme/
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# PalmPay.io Website files
|
# PalmPay.io Website files
|
||||||
|
|
||||||
Feel free to copy any/all of these files if you are creating a clone site such as PalmPay.se, PalmPay.pt, PalmPay.mx, PalmPay.my, PalmPay.ca, PalmPay.pro, PalmPay.solutions, PalmPay.ch, etc
|
Feel free to copy any/all of these files if you are creating a clone site such as PalmPay.se, PalmPay.pt, PalmPay.mx, PalmPay.my, PalmPay.ca, PalmPay.pro, etc
|
||||||
|
|
||||||
Any questions, feel free to ping us on..
|
Any questions, feel free to ping us on..
|
||||||
Matrix: http://agorise.chat
|
Telegram: https://t.me/Agorise
|
||||||
Session: 052f99b1965cb2a54ac516d29d122f5ec7b13e30209c31e9f57f820e7008336758
|
Keybase: https://keybase.io/team/Agorise
|
||||||
|
|
18
app.js
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
var compression = require("compression");
|
||||||
|
var createError = require("http-errors");
|
||||||
|
var express = require("express");
|
||||||
|
var path = require("path");
|
||||||
|
|
||||||
|
var app = express();
|
||||||
|
|
||||||
|
app.use(compression());
|
||||||
|
app.use(express.json());
|
||||||
|
app.use(express.urlencoded({ extended: false }));
|
||||||
|
app.use(express.static(path.join(__dirname, "public")));
|
||||||
|
app.use("/marketing",express.static(path.join(__dirname, 'public')));
|
||||||
|
app.use("/", express.static(path.join(__dirname, "./client/build")));
|
||||||
|
app.get("*", function(request, response) {
|
||||||
|
response.sendFile(path.resolve(__dirname, "./client/build", "index.html"));
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = app;
|
17
appdev.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
var createError = require('http-errors');
|
||||||
|
var express = require('express');
|
||||||
|
var path = require('path');
|
||||||
|
var cookieParser = require('cookie-parser');
|
||||||
|
var logger = require('morgan');
|
||||||
|
var router = express.Router();
|
||||||
|
|
||||||
|
var app = express();
|
||||||
|
|
||||||
|
app.use(logger('dev'));
|
||||||
|
app.use(express.json());
|
||||||
|
app.use(express.urlencoded({ extended: false }));
|
||||||
|
|
||||||
|
app.use(express.static(path.join(__dirname, 'public')));
|
||||||
|
app.use("/marketing",express.static(path.join(__dirname, 'public')));
|
||||||
|
module.exports = app;
|
98
bin/www
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var app = require("../app");
|
||||||
|
var debug = require("debug")("palmpay:server");
|
||||||
|
var http = require("http");
|
||||||
|
var fs = require("fs");
|
||||||
|
var https = require("https");
|
||||||
|
|
||||||
|
const key = fs.readFileSync('./acme/etc/live/palmpay.io/privkey.pem', 'utf8');
|
||||||
|
const cert = fs.readFileSync('./acme/etc/live/palmpay.io/cert.pem', 'utf8');
|
||||||
|
const ca = fs.readFileSync('./acme/etc/live/palmpay.io/chain.pem', 'utf8');
|
||||||
|
|
||||||
|
var ssl_options = {
|
||||||
|
key: key,
|
||||||
|
cert: cert,
|
||||||
|
ca: ca
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get port from environment and store in Express.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var port = normalizePort(process.env.PORT || "80");
|
||||||
|
app.set("port", port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create HTTP/HTTPS server.
|
||||||
|
*/
|
||||||
|
var secureServer = https.createServer(ssl_options, app);
|
||||||
|
var server = http.createServer(app);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listen on provided port, on all network interfaces.
|
||||||
|
*/
|
||||||
|
secureServer.listen(443);
|
||||||
|
server.listen(port);
|
||||||
|
server.on("error", onError);
|
||||||
|
server.on("listening", onListening);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize a port into a number, string, or false.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function normalizePort(val) {
|
||||||
|
var port = parseInt(val, 10);
|
||||||
|
|
||||||
|
if (isNaN(port)) {
|
||||||
|
// named pipe
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port >= 0) {
|
||||||
|
// port number
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event listener for HTTP server "error" event.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onError(error) {
|
||||||
|
if (error.syscall !== "listen") {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
var bind = typeof port === "string" ? "Pipe " + port : "Port " + port;
|
||||||
|
|
||||||
|
// handle specific listen errors with friendly messages
|
||||||
|
switch (error.code) {
|
||||||
|
case "EACCES":
|
||||||
|
console.error(bind + " requires elevated privileges");
|
||||||
|
process.exit(1);
|
||||||
|
break;
|
||||||
|
case "EADDRINUSE":
|
||||||
|
console.error(bind + " is already in use");
|
||||||
|
process.exit(1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event listener for HTTP server "listening" event.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onListening() {
|
||||||
|
var addr = server.address();
|
||||||
|
var bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port;
|
||||||
|
debug("Listening on " + bind);
|
||||||
|
}
|
86
bin/wwwdev
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var app = require("../appdev");
|
||||||
|
var debug = require("debug")("palmpay:server");
|
||||||
|
var http = require("http");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get port from environment and store in Express.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var port = normalizePort(process.env.PORT || "3000");
|
||||||
|
app.set("port", port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create HTTP server.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var server = http.createServer(app);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listen on provided port, on all network interfaces.
|
||||||
|
*/
|
||||||
|
|
||||||
|
server.listen(port);
|
||||||
|
server.on("error", onError);
|
||||||
|
server.on("listening", onListening);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize a port into a number, string, or false.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function normalizePort(val) {
|
||||||
|
var port = parseInt(val, 10);
|
||||||
|
|
||||||
|
if (isNaN(port)) {
|
||||||
|
// named pipe
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port >= 0) {
|
||||||
|
// port number
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event listener for HTTP server "error" event.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onError(error) {
|
||||||
|
if (error.syscall !== "listen") {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
var bind = typeof port === "string" ? "Pipe " + port : "Port " + port;
|
||||||
|
|
||||||
|
// handle specific listen errors with friendly messages
|
||||||
|
switch (error.code) {
|
||||||
|
case "EACCES":
|
||||||
|
console.error(bind + " requires elevated privileges");
|
||||||
|
process.exit(1);
|
||||||
|
break;
|
||||||
|
case "EADDRINUSE":
|
||||||
|
console.error(bind + " is already in use");
|
||||||
|
process.exit(1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event listener for HTTP server "listening" event.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onListening() {
|
||||||
|
var addr = server.address();
|
||||||
|
var bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port;
|
||||||
|
debug("Listening on " + bind);
|
||||||
|
}
|
21
client/.gitignore
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
21
client/package.json
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"name": "client",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.16.3",
|
||||||
|
"mdbreact": "^4.5.0",
|
||||||
|
"react": "^16.4.1",
|
||||||
|
"react-dom": "^16.4.1",
|
||||||
|
"react-ripples": "^1.1.2",
|
||||||
|
"react-scripts": "1.1.4",
|
||||||
|
"react-scroll": "^1.7.9"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "react-scripts start",
|
||||||
|
"build": "react-scripts build",
|
||||||
|
"test": "react-scripts test --env=jsdom --watchAll",
|
||||||
|
"eject": "react-scripts eject"
|
||||||
|
},
|
||||||
|
"proxy": "http://localhost:3001"
|
||||||
|
}
|
|
@ -3,29 +3,31 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
<title>PalmPay - Point of Sale software</title>
|
<title>PalmPay</title>
|
||||||
|
|
||||||
<!-- FB Open Graph data -->
|
<!-- FB Open Graph data -->
|
||||||
<meta property="og:title" content="PalmPay">
|
<meta property="og:title" content="PalmPay">
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:image" content="http://palmpay.io/PalmPayIO.png">
|
<meta property="og:image" content="http://palmpay.io/PalmPayIO.png">
|
||||||
<meta property="og:description" content="Cryptocurrencies bring Global Sales; HIVE, HBD, BTS, Bitcoin, Bitcoin Cash, bitUSD, bitEUR, bitMXN, Litecoin and more.">
|
<meta property="og:description" content="Cryptocurrencies bring Global Sales; Bitcoin Cash, bitUSD, bitEUR, bitRUB, bitXCD, bitSilver, Steem, Litecoin and more.">
|
||||||
<meta property="og:url" content="http://palmpay.io/">
|
<meta property="og:url" content="http://palmpay.io/">
|
||||||
|
|
||||||
<!-- Twitter Card data -->
|
<!-- Twitter Card data -->
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:title" content="PalmPay">
|
<meta name="twitter:title" content="PalmPay">
|
||||||
<meta name="twitter:description" content="Cryptocurrencies bring Global Sales; HIVE, HBD, BTS, Bitcoin, Bitcoin Cash, bitUSD, bitEUR, bitMXN, Litecoin and more.">
|
<meta name="twitter:description" content="Cryptocurrencies bring Global Sales; Bitcoin Cash, bitUSD, bitEUR, bitRUB, bitXCD, bitSilver, Steem, Litecoin and more.">
|
||||||
<meta name="twitter:image" content="http://palmpay.io/PalmPayIO.png">
|
<meta name="twitter:image" content="http://palmpay.io/PalmPayIO.png">
|
||||||
<meta name="twitter:url" content="http://palmpay.io/">
|
<meta name="twitter:url" content="http://palmpay.io/">
|
||||||
|
|
||||||
<!--
|
|
||||||
manifest.json provides metadata used when your web app is added to the
|
|
||||||
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
|
|
||||||
-->
|
|
||||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
|
||||||
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
|
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v4=eE58gaorm5">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v4=eE58gaorm5">
|
||||||
|
<link rel="icon" type="image/png" sizes="194x194" href="/favicon-194x194.png?v4=eE58gaorm5">
|
||||||
|
<link rel="icon" type="image/png" sizes="192x192" href="/android-chrome-192x192.png?v4=eE58gaorm5">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v4=eE58gaorm5">
|
||||||
|
<link rel="manifest" href="/site.webmanifest?v4=eE58gaorm5">
|
||||||
|
<link rel="mask-icon" href="/safari-pinned-tab.svg?v4=eE58gaorm5" color="#128f52">
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico?v4=eE58gaorm5">
|
||||||
<meta name="apple-mobile-web-app-title" content="PalmPay">
|
<meta name="apple-mobile-web-app-title" content="PalmPay">
|
||||||
<meta name="application-name" content="PalmPay">
|
<meta name="application-name" content="PalmPay">
|
||||||
<meta name="msapplication-TileColor" content="#128f52">
|
<meta name="msapplication-TileColor" content="#128f52">
|
241
client/src/App.js
Normal file
|
@ -0,0 +1,241 @@
|
||||||
|
import React from "react";
|
||||||
|
import { Footer, Row, Col, Modal, ModalBody, ModalHeader } from "mdbreact";
|
||||||
|
import { BrowserRouter as Router } from "react-router-dom";
|
||||||
|
import { Events, animateScroll as scroll, scrollSpy } from "react-scroll";
|
||||||
|
import HomeNav from "./components/HomeNav";
|
||||||
|
import MarketingNav from "./components/MarketingNav";
|
||||||
|
import "./index.css";
|
||||||
|
import "./static/css/palmpay.css";
|
||||||
|
|
||||||
|
//import './static/css/palmpay.css';
|
||||||
|
|
||||||
|
import Routes from "./Routes";
|
||||||
|
|
||||||
|
class App extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = { showmenu: true };
|
||||||
|
this.state = {
|
||||||
|
collapse: false,
|
||||||
|
modal2: false
|
||||||
|
};
|
||||||
|
this.toggle2 = this.toggle2.bind(this);
|
||||||
|
this.onClick = this.onClick.bind(this);
|
||||||
|
this.handleNavbarClick = this.handleNavbarClick.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle2() {
|
||||||
|
this.setState({
|
||||||
|
modal2: !this.state.modal2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick() {
|
||||||
|
this.setState({
|
||||||
|
collapse: !this.state.collapse
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleNavbarClick() {
|
||||||
|
this.setState({
|
||||||
|
collapse: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
componentDidMount() {
|
||||||
|
Events.scrollEvent.register("begin", function(to, element) {
|
||||||
|
console.log("begin", arguments);
|
||||||
|
});
|
||||||
|
|
||||||
|
Events.scrollEvent.register("end", function(to, element) {
|
||||||
|
console.log("end", arguments);
|
||||||
|
});
|
||||||
|
|
||||||
|
scrollSpy.update();
|
||||||
|
}
|
||||||
|
componentWillUnmount() {
|
||||||
|
Events.scrollEvent.remove("begin");
|
||||||
|
Events.scrollEvent.remove("end");
|
||||||
|
}
|
||||||
|
scrollToTop() {
|
||||||
|
scroll.scrollToTop();
|
||||||
|
}
|
||||||
|
scrollToBottom() {
|
||||||
|
scroll.scrollToBottom();
|
||||||
|
}
|
||||||
|
scrollTo() {
|
||||||
|
scroll.scrollTo(100);
|
||||||
|
}
|
||||||
|
scrollMore() {
|
||||||
|
scroll.scrollMore(100);
|
||||||
|
}
|
||||||
|
handleSetActive(to) {
|
||||||
|
console.log(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const currentPath = window.location.pathname;
|
||||||
|
const collapsed = this.state.collapsed;
|
||||||
|
const overlay = (
|
||||||
|
<div
|
||||||
|
id="sidenav-overlay"
|
||||||
|
style={{ backgroundColor: "transparent" }}
|
||||||
|
onClick={this.handleNavbarClick}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<Router>
|
||||||
|
<span id="apppage">
|
||||||
|
{!currentPath.includes("marketing") ? (
|
||||||
|
<HomeNav toggle2={this.toggle2} />
|
||||||
|
) : (
|
||||||
|
<MarketingNav />
|
||||||
|
)}
|
||||||
|
{collapsed && overlay}
|
||||||
|
|
||||||
|
<Routes />
|
||||||
|
|
||||||
|
<Footer className="footer text-center">
|
||||||
|
<div className="containerfix">
|
||||||
|
<Row className="vertical-align footerrow">
|
||||||
|
<Col md="4">
|
||||||
|
<img alt="" src="./img/footerlogo.png" />
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col md="4">
|
||||||
|
<ul className="list-inline social-buttons">
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://t.me/Agorise">
|
||||||
|
<i className="fa fa-telegram" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://twitter.com/Agorise_world">
|
||||||
|
<i className="fa fa-twitter" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://youtube.com/Agorise">
|
||||||
|
<i className="fa fa-youtube" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://d.tube/c/agorise">
|
||||||
|
<img alt="" src="./img/dtube.png" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://steemit.com/@Agorise">
|
||||||
|
<img alt="" src="./img/steemit.png" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</Col>
|
||||||
|
<Col md="4">
|
||||||
|
<p className="mb-0">
|
||||||
|
<span id="ft_lang1">FASTER AND SAFER THAN CASH</span>
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className="copyright py-3 text-center text-white"
|
||||||
|
style={{ fontSize: "0.8em" }}>
|
||||||
|
<div>
|
||||||
|
<div className="row vertical-align">
|
||||||
|
<div className="col-md-10 mx-md-auto">
|
||||||
|
<p>
|
||||||
|
<span id="cp_lang1">
|
||||||
|
This website is not intended as legal or financial
|
||||||
|
advice, is not a guarantee of anything and we do not
|
||||||
|
collect any info about you whatsoever. PalmPay is a
|
||||||
|
Point Of Sale product by Agorise, Ltd. For technical
|
||||||
|
details, chat anytime 24/7 with the Agorise community
|
||||||
|
on Telegram at:
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="http://t.me/Agorise">
|
||||||
|
{" "}
|
||||||
|
http://t.me/Agorise
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="row vertical-align">
|
||||||
|
<div className="col-md-4" />
|
||||||
|
<div className="col-md-4">
|
||||||
|
<small>
|
||||||
|
© Copyright {new Date().getFullYear()}{" "}
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="http://agorise.world/">
|
||||||
|
{" "}
|
||||||
|
Agorise Ltd.{" "}
|
||||||
|
</a>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row justify-content-end">
|
||||||
|
<div
|
||||||
|
style={{ fontSize: "0.8em" }}
|
||||||
|
className="text-white col-md-2">
|
||||||
|
<small>
|
||||||
|
Site by:{" "}
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://about.me/poqdavid">
|
||||||
|
poqdavid
|
||||||
|
</a>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Footer>
|
||||||
|
|
||||||
|
<Modal isOpen={this.state.modal2} toggle={this.toggle2}>
|
||||||
|
<ModalHeader toggle={this.toggle2}>
|
||||||
|
<span id="mdl_lang1">Downloads</span>
|
||||||
|
</ModalHeader>
|
||||||
|
<ModalBody className="text-center">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://play.google.com/store/apps/details?id=cy.agorise.palmpay">
|
||||||
|
<img
|
||||||
|
alt=""
|
||||||
|
className="logo1"
|
||||||
|
src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png"
|
||||||
|
height="60"
|
||||||
|
width="auto"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</ModalBody>
|
||||||
|
</Modal>
|
||||||
|
</span>
|
||||||
|
</Router>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
168
client/src/App.test.js
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { Button, Navbar, NavbarBrand, NavbarNav, NavbarToggler, Collapse, NavItem, Footer, NavLink, Mask, Row, Col, Fa, View, Container, Modal, ModalBody, ModalHeader, ModalFooter} from 'mdbreact';
|
||||||
|
import { BrowserRouter as Router } from 'react-router-dom';
|
||||||
|
import './index.css';
|
||||||
|
import './static/css/palmpay.css';
|
||||||
|
|
||||||
|
//import './css/csslider.css';
|
||||||
|
|
||||||
|
import Routes from './Routes';
|
||||||
|
|
||||||
|
class App extends React.Component {
|
||||||
|
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
super(props),
|
||||||
|
this.state = {
|
||||||
|
collapse : false,
|
||||||
|
modal2: false
|
||||||
|
}
|
||||||
|
this.toggle2 = this.toggle2.bind(this);
|
||||||
|
this.onClick = this.onClick.bind(this);
|
||||||
|
this.handleNavbarClick = this.handleNavbarClick.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle2() {
|
||||||
|
this.setState({
|
||||||
|
modal2: !this.state.modal2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick(){
|
||||||
|
this.setState({
|
||||||
|
collapse: !this.state.collapse,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleNavbarClick(){
|
||||||
|
this.setState({
|
||||||
|
collapse: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
render(){
|
||||||
|
const collapsed = this.state.collapsed;
|
||||||
|
const overlay = <div id="sidenav-overlay" style={{backgroundColor: 'transparent'}} onClick={this.handleNavbarClick}/>
|
||||||
|
return (
|
||||||
|
<Router>
|
||||||
|
<div id="apppage" className="flyout">
|
||||||
|
|
||||||
|
<Navbar dark expand="md" fixed="top" id="mainNav" scrolling>
|
||||||
|
<Container>
|
||||||
|
<NavbarBrand>
|
||||||
|
<img className="logo1" src="./img/logo.png" width="100%"></img>
|
||||||
|
<img className="logo2" src="./img/logo54.png" width="100%" style={{display: 'none'}}></img>
|
||||||
|
</NavbarBrand>
|
||||||
|
<NavbarToggler onClick = { this.onClick } />
|
||||||
|
<Collapse isOpen = {this.state.collapse} navbar>
|
||||||
|
<NavbarNav right>
|
||||||
|
<NavItem>
|
||||||
|
<NavLink to="#services"><span id="nav_lang1">Services</span></NavLink>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
<NavLink to="#about"><span id="nav_lang2">About</span></NavLink>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
<NavLink to="#testimonies"><span id="nav_lang3">Testimonies</span></NavLink>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
<NavLink to="#!" onClick={this.toggle2}><span id="nav_lang4">Downloads</span></NavLink>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
</NavItem>
|
||||||
|
</NavbarNav>
|
||||||
|
<ul className="nav navbar-nav navbar-right fix-li-menu" multilinks-noscroll="true" id="langs"></ul>
|
||||||
|
</Collapse>
|
||||||
|
</Container>
|
||||||
|
</Navbar>
|
||||||
|
{ collapsed && overlay}
|
||||||
|
<Routes />
|
||||||
|
|
||||||
|
<Footer className="footer text-center">
|
||||||
|
<div className="containerfix">
|
||||||
|
<Row className="vertical-align">
|
||||||
|
<Col md="4">
|
||||||
|
<img src="./img/footerlogo.png"></img>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col md="4">
|
||||||
|
<ul className="list-inline social-buttons">
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a target="_blank" href="https://t.me/Agorise">
|
||||||
|
<i className="fa fa-telegram"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a target="_blank" href="https://twitter.com/Agorise_world">
|
||||||
|
<i className="fa fa-twitter"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a target="_blank" href="https://youtube.com/Agorise">
|
||||||
|
<i className="fa fa-youtube"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a target="_blank" href="https://d.tube/c/agorise">
|
||||||
|
<img src="./img/dtube.png"></img>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<a target="_blank" href="https://steemit.com/@Agorise">
|
||||||
|
<img src="./img/steemit.png"></img>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</Col>
|
||||||
|
<Col md="4">
|
||||||
|
|
||||||
|
<p className="mb-0">
|
||||||
|
<span id="ft_lang1">FASTER AND SAFER THAN CASH</span>
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
</Footer>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div className="copyright py-3 text-center text-white" style={{fontSize:'0.8em'}}>
|
||||||
|
<div className="containerfix">
|
||||||
|
<div className="row vertical-align">
|
||||||
|
<div className="col-md-12">
|
||||||
|
<p>
|
||||||
|
<span id="cp_lang1">
|
||||||
|
This website is not intended as legal or financial advice, is not a guarantee of anything and we do not collect any info about you whatsoever. PalmPay is a Point Of Sale product by Agorise, Ltd. For technical details, chat anytime 24/7 with the Agorise community on Telegram at:
|
||||||
|
<a target="_blank" href="http://t.me/Agorise"> http://t.me/Agorise</a>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div className="row vertical-align">
|
||||||
|
|
||||||
|
<div className="col-md-4"></div>
|
||||||
|
<div className="col-md-4">
|
||||||
|
|
||||||
|
<small>© Copyright {(new Date().getFullYear())} <a target="_blank" href="http://agorise.world/"> Agorise Ltd. </a></small>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Modal isOpen={this.state.modal2} toggle={this.toggle2}>
|
||||||
|
<ModalHeader toggle={this.toggle2}><span id="mdl_lang1">Downloads</span></ModalHeader>
|
||||||
|
<ModalBody className="text-center">
|
||||||
|
<a target="_blank" href="https://play.google.com/store/apps/details?id=cy.agorise.palmpay"><img className="logo1" src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png" height="60" width="auto"></img></a>
|
||||||
|
</ModalBody>
|
||||||
|
</Modal>
|
||||||
|
</div>
|
||||||
|
</Router>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
25
client/src/Routes.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import React from "react";
|
||||||
|
import { Route, Switch } from "react-router-dom";
|
||||||
|
|
||||||
|
// FREE
|
||||||
|
import HomePage from "./pages/HomePage";
|
||||||
|
import MarketingPage from "./pages/MarketingPage";
|
||||||
|
|
||||||
|
class Routes extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<Switch>
|
||||||
|
{/* FREE */}
|
||||||
|
<Route exact path="/" component={HomePage} />
|
||||||
|
<Route exact path="/marketing" component={MarketingPage} />
|
||||||
|
<Route
|
||||||
|
render={function() {
|
||||||
|
return <h1>Not Found</h1>;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Switch>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Routes;
|
116
client/src/components/HomeNav.js
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
import {
|
||||||
|
Navbar,
|
||||||
|
NavbarNav,
|
||||||
|
NavbarToggler,
|
||||||
|
Collapse,
|
||||||
|
NavItem,
|
||||||
|
NavLink,
|
||||||
|
Container
|
||||||
|
} from "mdbreact";
|
||||||
|
import { Link } from "react-scroll";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
class HomeNav extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = { showmenu: true };
|
||||||
|
this.state = {
|
||||||
|
collapse: false
|
||||||
|
};
|
||||||
|
this.onClick = this.onClick.bind(this);
|
||||||
|
this.handleNavbarClick = this.handleNavbarClick.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick() {
|
||||||
|
this.setState({
|
||||||
|
collapse: !this.state.collapse
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleNavbarClick() {
|
||||||
|
this.setState({
|
||||||
|
collapse: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<Navbar dark expand="md" fixed="top" id="mainNav" scrolling>
|
||||||
|
<Container className="menuc" hidden={this.state.showmenu}>
|
||||||
|
<Link
|
||||||
|
activeClass="active"
|
||||||
|
className="navbar-brand"
|
||||||
|
to="home"
|
||||||
|
href="/"
|
||||||
|
spy={true}
|
||||||
|
smooth={true}
|
||||||
|
offset={0}
|
||||||
|
duration={500}
|
||||||
|
onSetActive={this.handleSetActive}>
|
||||||
|
<img alt="" className="logo1" src="./img/logo.png" width="100%" />
|
||||||
|
<img
|
||||||
|
alt=""
|
||||||
|
className="logo2"
|
||||||
|
src="./img/logo54.png"
|
||||||
|
width="100%"
|
||||||
|
style={{ display: "none" }}
|
||||||
|
/>
|
||||||
|
</Link>
|
||||||
|
|
||||||
|
<NavbarToggler onClick={this.onClick} />
|
||||||
|
<Collapse isOpen={this.state.collapse} navbar>
|
||||||
|
<NavbarNav right>
|
||||||
|
<NavItem>
|
||||||
|
<Link
|
||||||
|
activeClass="active"
|
||||||
|
className="nav-link"
|
||||||
|
to="services"
|
||||||
|
spy={true}
|
||||||
|
smooth={true}
|
||||||
|
offset={0}
|
||||||
|
duration={500}
|
||||||
|
onSetActive={this.handleSetActive}>
|
||||||
|
<span id="nav_lang1">Services</span>
|
||||||
|
</Link>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
<Link
|
||||||
|
activeClass="active"
|
||||||
|
className="nav-link"
|
||||||
|
to="about"
|
||||||
|
spy={true}
|
||||||
|
smooth={true}
|
||||||
|
offset={0}
|
||||||
|
duration={500}
|
||||||
|
onSetActive={this.handleSetActive}>
|
||||||
|
<span id="nav_lang2">About</span>
|
||||||
|
</Link>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
<Link
|
||||||
|
activeClass="active"
|
||||||
|
className="nav-link"
|
||||||
|
href="#testimonies"
|
||||||
|
to="testimonies"
|
||||||
|
spy={true}
|
||||||
|
smooth={true}
|
||||||
|
offset={0}
|
||||||
|
duration={500}
|
||||||
|
onSetActive={this.handleSetActive}>
|
||||||
|
<span id="nav_lang3">Testimonies</span>
|
||||||
|
</Link>
|
||||||
|
</NavItem>
|
||||||
|
<NavItem>
|
||||||
|
<NavLink to="#!" onClick={this.props.toggle2}>
|
||||||
|
<span id="nav_lang4">Downloads</span>
|
||||||
|
</NavLink>
|
||||||
|
</NavItem>
|
||||||
|
</NavbarNav>
|
||||||
|
</Collapse>
|
||||||
|
</Container>
|
||||||
|
</Navbar>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HomeNav;
|
|
@ -8,17 +8,13 @@ import {
|
||||||
//import { Link } from "react-scroll";
|
//import { Link } from "react-scroll";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
/**
|
class MarketingNav extends React.Component {
|
||||||
* The header of the marketing page.
|
|
||||||
*/
|
|
||||||
class MarketingHeader extends React.Component {
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = { showmenu: true };
|
this.state = { showmenu: true };
|
||||||
this.state = {
|
this.state = {
|
||||||
collapse: false
|
collapse: false
|
||||||
};
|
};
|
||||||
|
|
||||||
this.onClick = this.onClick.bind(this);
|
this.onClick = this.onClick.bind(this);
|
||||||
this.handleNavbarClick = this.handleNavbarClick.bind(this);
|
this.handleNavbarClick = this.handleNavbarClick.bind(this);
|
||||||
}
|
}
|
||||||
|
@ -37,7 +33,6 @@ class MarketingHeader extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div>
|
|
||||||
<Navbar
|
<Navbar
|
||||||
dark
|
dark
|
||||||
expand="md"
|
expand="md"
|
||||||
|
@ -63,9 +58,8 @@ class MarketingHeader extends React.Component {
|
||||||
</Collapse>
|
</Collapse>
|
||||||
</Container>
|
</Container>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default MarketingHeader;
|
export default MarketingNav;
|
|
@ -42,10 +42,10 @@
|
||||||
strong.important {
|
strong.important {
|
||||||
font-weight: 700 !important;
|
font-weight: 700 !important;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
.testimonialc {
|
.testimonialc {
|
||||||
margin-bottom: 100px;
|
margin-bottom: 100px;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
.carousel-item i {
|
.carousel-item i {
|
||||||
font-size: 80px;
|
font-size: 80px;
|
||||||
|
@ -77,7 +77,9 @@ strong.important {
|
||||||
.testimonialc .controls-top .btn-floating {
|
.testimonialc .controls-top .btn-floating {
|
||||||
background: #4285f4;
|
background: #4285f4;
|
||||||
}
|
}
|
||||||
|
.testimonialc .carousel-indicators {
|
||||||
|
margin-bottom: -5em;
|
||||||
|
}
|
||||||
.testimonialc .card {
|
.testimonialc .card {
|
||||||
margin: 1px;
|
margin: 1px;
|
||||||
}
|
}
|
||||||
|
@ -91,26 +93,10 @@ strong.important {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#testimonies {
|
#testimonies {
|
||||||
padding: 5rem 0 !important;
|
padding: 14rem 0 !important;
|
||||||
}
|
}
|
||||||
@media (min-width: 1200px) {
|
@media (min-width: 1200px) {
|
||||||
.menuc {
|
.menuc {
|
||||||
max-width: 90% !important;
|
max-width: 90% !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (min-width: 990px) {
|
|
||||||
|
|
||||||
.testimoniesBox {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
.testimonialbox {
|
|
||||||
margin-top: -20px;
|
|
||||||
}
|
|
||||||
.testimonialc .carousel-indicators {
|
|
||||||
margin-bottom: -1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
14
client/src/index.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import React from "react";
|
||||||
|
import ReactDOM from "react-dom";
|
||||||
|
import "font-awesome/css/font-awesome.min.css";
|
||||||
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
|
import "mdbreact/dist/css/mdb.css";
|
||||||
|
import "./index.css";
|
||||||
|
|
||||||
|
import App from "./App";
|
||||||
|
|
||||||
|
import registerServiceWorker from "./registerServiceWorker";
|
||||||
|
|
||||||
|
ReactDOM.render(<App />, document.getElementById("root"));
|
||||||
|
|
||||||
|
registerServiceWorker();
|
7
client/src/pages/HomePage.css
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#apppage .vmain {
|
||||||
|
background-image: url("../static/img/header-bg.jpg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center center;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
612
client/src/pages/HomePage.js
Normal file
|
@ -0,0 +1,612 @@
|
||||||
|
import React from "react";
|
||||||
|
import {
|
||||||
|
Carousel,
|
||||||
|
CarouselInner,
|
||||||
|
CarouselItem,
|
||||||
|
CarouselIndicators,
|
||||||
|
CarouselIndicator,
|
||||||
|
Mask,
|
||||||
|
Row,
|
||||||
|
Col,
|
||||||
|
Button,
|
||||||
|
View,
|
||||||
|
Container
|
||||||
|
} from "mdbreact";
|
||||||
|
|
||||||
|
import "./HomePage.css";
|
||||||
|
|
||||||
|
class HomePage extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.next = this.next.bind(this);
|
||||||
|
this.prev = this.prev.bind(this);
|
||||||
|
this.state = {
|
||||||
|
activeItem: 1,
|
||||||
|
maxLength: 6
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
next() {
|
||||||
|
let nextItem = this.state.activeItem + 1;
|
||||||
|
if (nextItem > this.state.maxLength) {
|
||||||
|
this.setState({ activeItem: 1 });
|
||||||
|
} else {
|
||||||
|
this.setState({ activeItem: nextItem });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prev() {
|
||||||
|
let prevItem = this.state.activeItem - 1;
|
||||||
|
if (prevItem < 1) {
|
||||||
|
this.setState({ activeItem: this.state.maxLength });
|
||||||
|
} else {
|
||||||
|
this.setState({ activeItem: prevItem });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
goToIndex(item) {
|
||||||
|
if (this.state.activeItem !== item) {
|
||||||
|
this.setState({
|
||||||
|
activeItem: item
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { activeItem } = this.state;
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
<View className="vmain">
|
||||||
|
<Mask className="d-flex justify-content-center align-items-center gradient">
|
||||||
|
<Container className="px-md-3 px-sm-0">
|
||||||
|
<Row>
|
||||||
|
<Col lg="10" className="mx-auto white-text text-center">
|
||||||
|
<h1 className="text-uppercase">
|
||||||
|
<strong className="important">
|
||||||
|
<span id="header_lang1">
|
||||||
|
Accept any Digital Currency at Zero Cost
|
||||||
|
</span>
|
||||||
|
</strong>
|
||||||
|
</h1>
|
||||||
|
<hr className="hr-light my-4 w-75" />
|
||||||
|
</Col>
|
||||||
|
<Col lg="8" className="mx-auto white-text text-center">
|
||||||
|
<p className="subtext-header mt-2 mb-4 text-faded">
|
||||||
|
<span id="header_lang2">
|
||||||
|
Cryptocurrencies bring Global Sales; Bitcoin Cash, bitUSD,
|
||||||
|
bitEUR, bitRUB, bitXCD, bitSilver, Steem, Litecoin and
|
||||||
|
more
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<Button
|
||||||
|
href="#services"
|
||||||
|
className="btn-lg btn-primary"
|
||||||
|
rounded>
|
||||||
|
<span id="header_lang3">Tell me more</span>
|
||||||
|
</Button>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Container>
|
||||||
|
</Mask>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<section data-spy="scroll" data-target="#mainNav" id="services">
|
||||||
|
<div className="containerfix">
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-lg-12 text-center">
|
||||||
|
<h2 className="section-heading">
|
||||||
|
<span id="sr_lang1">
|
||||||
|
100% FREE Crypto Point-Of-Sale Software for any Business
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<hr className="my-4" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="containerfix">
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Retail" src="./img/4.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang2">Retail</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Cafe/Bars" src="./img/6.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang3">Cafe/Bars</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Restaurants" src="./img/3.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang4">Restaurants</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Gas Stations" src="./img/7.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang5">Gas Stations</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Bill-Pay Counters" src="./img/2.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang6">Bill-Pay Counters</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Grocery" src="./img/1.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang7">Grocery</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Delivery Drivers" src="./img/9.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang8">Delivery Drivers</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-lg-3 col-md-6 text-center">
|
||||||
|
<div className="service-box mt-5 mx-auto">
|
||||||
|
<i className="fa fa-4x text-primary mb-3 sr-icons">
|
||||||
|
<img alt="Phone Orders" src="./img/8.png" />
|
||||||
|
</i>
|
||||||
|
<h3 className="mb-3">
|
||||||
|
<span id="sr_lang9">Phone Orders</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="about bg-secondary" id="about">
|
||||||
|
<div className="container">
|
||||||
|
<div className="row align-items-center">
|
||||||
|
<div className="col-lg-6 order-lg-2">
|
||||||
|
<div className="p-5">
|
||||||
|
<img alt="" className="img-fluid" src="./img/ab1.png" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-6 order-lg-1">
|
||||||
|
<div className="p-5">
|
||||||
|
<h2 className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang1">
|
||||||
|
Integrates seamlessly with Existing Systems
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<p className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang2">
|
||||||
|
PalmPay was built from the ground up to be Future-Proof.
|
||||||
|
Business owners no longer need to stay savvy on the
|
||||||
|
latest technologies. Blockchains and currencies come and
|
||||||
|
go, but PalmPay supports them and offers them to your
|
||||||
|
customers based upon their popularity, automatically.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang3">
|
||||||
|
Zero cost. Zero setup fee. Zero transaction fee. Zero
|
||||||
|
monthly fee. Your Customers pay the tiny 0.5%
|
||||||
|
transaction fee to pay with their favorite digital
|
||||||
|
currency.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang4">
|
||||||
|
eReceipts, and advanced Export features enable
|
||||||
|
simplified accounting and Tax reporting. Your Customers
|
||||||
|
also receive a beautiful eReceipt directly to their
|
||||||
|
smartphone after their payment.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang5">
|
||||||
|
Faster and Safer than Cash. Customer transactions take 3
|
||||||
|
seconds or less. Let’s see cash or card Customers get
|
||||||
|
through that fast!
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row align-items-center">
|
||||||
|
<div className="col-lg-6">
|
||||||
|
<div className="p-5">
|
||||||
|
<img alt="" className="img-fluid" src="./img/ab2.png" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-6">
|
||||||
|
<div className="p-5">
|
||||||
|
<h2 className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang6">
|
||||||
|
Mobile Payments are quicker than ever. Process your
|
||||||
|
Customer orders instantly
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<p className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang7">
|
||||||
|
Whether you are delivering packages requiring payment,
|
||||||
|
helping hundreds of Customers to speed through the
|
||||||
|
checkout line, or just serving up the bill in a
|
||||||
|
high-paced restaurant, PalmPay handles them all
|
||||||
|
instantly.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang8">
|
||||||
|
No more credit card expenses. No more cash robberies.
|
||||||
|
Maximum Security and Zero Risk with no chance of
|
||||||
|
ID-Theft or Card Fraud. PalmPay uses the Bitshares
|
||||||
|
blockchain to instantly secure any transaction amount
|
||||||
|
and has done so for over 3 years now, recently exceeding
|
||||||
|
3300 transactions per second.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang9">
|
||||||
|
Hacking a blockchain is impossible since it uses
|
||||||
|
Distributed Ledger Technology, instantly ensuring that
|
||||||
|
each transaction is verified by hundreds of computers
|
||||||
|
around the world.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row align-items-center">
|
||||||
|
<div className="col-lg-6 order-lg-2">
|
||||||
|
<div className="p-5">
|
||||||
|
<img alt="" className="img-fluid" src="./img/ab3.png" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-6 order-lg-1">
|
||||||
|
<div className="p-5">
|
||||||
|
<h2 className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang10">
|
||||||
|
Cryptocurrency volatility is a thing of the past
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<p className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang11">
|
||||||
|
PalmPay instantly converts Crypto into your stable,
|
||||||
|
local currency in digital form, such as bitEUR, bitUSD,
|
||||||
|
bitJPY, bitKRW, bitRUB or even bitGold and bitSilver.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang12">
|
||||||
|
These Smartcoins are closely pegged 1:1 to their
|
||||||
|
underlying asset so that you never have to worry about
|
||||||
|
paying your bills with Crypto.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang13">
|
||||||
|
For example, the Canadian merchant who just received
|
||||||
|
some volatile Dogecoin, can receive it as price-stable
|
||||||
|
bitCAD. One currency is instantly morphed into another,
|
||||||
|
of the Merchants choice. PalmPay handles all of this in
|
||||||
|
the background, allowing the customer to pay with
|
||||||
|
whatever Crypto they prefer.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang14">
|
||||||
|
This stability is the foundation of the Blockchain My
|
||||||
|
City (<a href="docs/Blockchain_My_City_BMC.pdf">BMC</a>)
|
||||||
|
Initiative. PalmPay includes the ability to
|
||||||
|
automatically pay every Ambassador and enrolled
|
||||||
|
Government from the 0.5% that is collected from
|
||||||
|
customers.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row align-items-center">
|
||||||
|
<div className="col-lg-6">
|
||||||
|
<div className="p-5">
|
||||||
|
<img alt="" className="img-fluid" src="./img/ab4.png" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-6">
|
||||||
|
<div className="p-5">
|
||||||
|
<h2 className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang15">
|
||||||
|
Unlimited, free Technical Support from PalmPay
|
||||||
|
Ambassadors
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<p className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang16">
|
||||||
|
Free? Yes, totally free. PalmPay Ambassadors are paid
|
||||||
|
automatically, every 3 seconds, via the Customer
|
||||||
|
transaction fee mentioned above. So, if you ever have
|
||||||
|
questions (in any of the 44 supported languages), just
|
||||||
|
contact your local PalmPay Ambassador directly, or ask
|
||||||
|
for one on Telegram at
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="http://t.me/Agorise">
|
||||||
|
http://t.me/Agorise
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang17">
|
||||||
|
As long as your business has WiFi, and an Android tablet
|
||||||
|
or smartphone (for the free PalmPay software), that’s
|
||||||
|
literally all you need. No other hardware is needed. If
|
||||||
|
desired, don’t forget to ask your PalmPay Ambassador for
|
||||||
|
free window decals, stickers, flyers and promotional
|
||||||
|
materials.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row align-items-center">
|
||||||
|
<div className="col-lg-6 order-lg-2">
|
||||||
|
<div className="p-5">
|
||||||
|
<img alt="" className="img-fluid" src="./img/ab5.png" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-6 order-lg-1">
|
||||||
|
<div className="p-5">
|
||||||
|
<h2 className="display-5 about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang18">
|
||||||
|
Access your accounts anytime, from anywhere in the world
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</h2>
|
||||||
|
<p className="about-text">
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang19">
|
||||||
|
Monitor the transactions at one or more of your
|
||||||
|
Businesses in real-time. Win, Mac, or Linux.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang20">
|
||||||
|
The Bitshares decentralized exchange (DEX) provides the
|
||||||
|
platform which PalmPay utilizes. Using their DEX, you
|
||||||
|
can freely move money between accounts, get a Loan, go
|
||||||
|
public, pay bills, Trade and even invest in other
|
||||||
|
assets.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<span>
|
||||||
|
<span id="ab_lang21">
|
||||||
|
They’re the bank that never closes, never needs a
|
||||||
|
bailout, and can never steal your money. Bitshares is
|
||||||
|
not a company. It’s a distributed network of computers
|
||||||
|
all running the same software providing maximum uptime.
|
||||||
|
So, stop trusting humans with your money and become your
|
||||||
|
own bank!
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="testimonials text-center" id="testimonies">
|
||||||
|
<div className="container">
|
||||||
|
<Row>
|
||||||
|
<Col lg="6">
|
||||||
|
<Carousel
|
||||||
|
className="testimonialc"
|
||||||
|
activeItem={this.state.activeItem}
|
||||||
|
next={this.next}>
|
||||||
|
<CarouselIndicators>
|
||||||
|
<CarouselIndicator
|
||||||
|
active={activeItem === 1 ? true : false}
|
||||||
|
onClick={() => {
|
||||||
|
this.goToIndex(1);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<CarouselIndicator
|
||||||
|
active={activeItem === 2 ? true : false}
|
||||||
|
onClick={() => {
|
||||||
|
this.goToIndex(2);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<CarouselIndicator
|
||||||
|
active={activeItem === 3 ? true : false}
|
||||||
|
onClick={() => {
|
||||||
|
this.goToIndex(3);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<CarouselIndicator
|
||||||
|
active={activeItem === 4 ? true : false}
|
||||||
|
onClick={() => {
|
||||||
|
this.goToIndex(4);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<CarouselIndicator
|
||||||
|
active={activeItem === 5 ? true : false}
|
||||||
|
onClick={() => {
|
||||||
|
this.goToIndex(5);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<CarouselIndicator
|
||||||
|
active={activeItem === 6 ? true : false}
|
||||||
|
onClick={() => {
|
||||||
|
this.goToIndex(6);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</CarouselIndicators>
|
||||||
|
<CarouselInner>
|
||||||
|
<Row>
|
||||||
|
<CarouselItem itemId="1">
|
||||||
|
<Col mb-lg="0" mx="auto" mb="4">
|
||||||
|
<i className="fa fa-user-circle-o" />
|
||||||
|
<h5>Erik Y. ★★★★★</h5>
|
||||||
|
<div className="font-weight-light mb-3">
|
||||||
|
"This is awesome! We have been looking for a way to
|
||||||
|
attract new customers and this is it."
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
</CarouselItem>
|
||||||
|
<CarouselItem itemId="2">
|
||||||
|
<Col mb-lg="0" mx="auto" mb="4">
|
||||||
|
<i className="fa fa-user-circle-o" />
|
||||||
|
<h5>Alexey T. ★★★★★</h5>
|
||||||
|
<p className="font-weight-light mb-0">
|
||||||
|
“Outstanding!! ”
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</CarouselItem>
|
||||||
|
<CarouselItem itemId="3">
|
||||||
|
<Col mb-lg="0" mx="auto" mb="4">
|
||||||
|
<i className="fa fa-user-circle-o" />
|
||||||
|
<h5>Nikos C. ★★★★★</h5>
|
||||||
|
<p className="font-weight-light mb-0">
|
||||||
|
“Το Palmpay είναι ένα άλλο μονοπάτι για τα κέρδη.
|
||||||
|
Απλα ΔΟΚΙΜΑΣΕ το!”
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</CarouselItem>
|
||||||
|
|
||||||
|
<CarouselItem itemId="4">
|
||||||
|
<Col mb-lg="0" mx="auto" mb="4">
|
||||||
|
<i className="fa fa-user-circle-o" />
|
||||||
|
<h5>Nadya L. ★★★★☆</h5>
|
||||||
|
<p className="font-weight-light mb-0">
|
||||||
|
“My husband suggested this and I am so glad to be
|
||||||
|
earning crypto now!”
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</CarouselItem>
|
||||||
|
|
||||||
|
<CarouselItem itemId="5">
|
||||||
|
<Col mb-lg="0" mx="auto" mb="4">
|
||||||
|
<i className="fa fa-user-circle-o" />
|
||||||
|
<h5>
|
||||||
|
Jennifer M. ★★★★★
|
||||||
|
</h5>
|
||||||
|
<p className="font-weight-light mb-0">
|
||||||
|
“Please tell me I can close my bank account now.
|
||||||
|
This is amazing, thank you Agorise!”
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</CarouselItem>
|
||||||
|
<CarouselItem itemId="6">
|
||||||
|
<Col mb-lg="0" mx="auto" mb="4">
|
||||||
|
<i className="fa fa-user-circle-o" />
|
||||||
|
<h5>Jose M. ★★★★★</h5>
|
||||||
|
<p className="font-weight-light mb-0">
|
||||||
|
“Nuestros clientes de Coin Shop se han duplicado
|
||||||
|
gracias a BitSilver y Palmpay. A++”
|
||||||
|
</p>
|
||||||
|
</Col>
|
||||||
|
</CarouselItem>
|
||||||
|
</Row>
|
||||||
|
</CarouselInner>
|
||||||
|
</Carousel>
|
||||||
|
</Col>
|
||||||
|
<Col lg="6" className="mx-auto white-text text-center">
|
||||||
|
<div className="embed-responsive embed-responsive-16by9">
|
||||||
|
<iframe
|
||||||
|
className="embed-responsive-item"
|
||||||
|
title="Video"
|
||||||
|
src="https://www.youtube.com/embed/X6X_zGIz27w"
|
||||||
|
frameborder="0"
|
||||||
|
allow="autoplay; encrypted-media"
|
||||||
|
allowfullscreen
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HomePage;
|
395
client/src/pages/MarketingPage.js
Normal file
|
@ -0,0 +1,395 @@
|
||||||
|
import React from "react";
|
||||||
|
import { Button, Collapse } from "mdbreact";
|
||||||
|
|
||||||
|
class MarketingPage extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.toggle = this.toggle.bind(this);
|
||||||
|
this.onClick1 = this.onClick1.bind(this);
|
||||||
|
this.onClick2 = this.onClick2.bind(this);
|
||||||
|
this.onClick3 = this.onClick3.bind(this);
|
||||||
|
this.onClick4 = this.onClick4.bind(this);
|
||||||
|
this.state = {
|
||||||
|
collapse: false,
|
||||||
|
accordion: false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
this.setState({ collapse: !this.state.collapse });
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick1() {
|
||||||
|
let state = "";
|
||||||
|
|
||||||
|
if (this.state.accordion !== 1) {
|
||||||
|
state = 1;
|
||||||
|
} else {
|
||||||
|
state = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
accordion: state
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick2() {
|
||||||
|
let state = "";
|
||||||
|
|
||||||
|
if (this.state.accordion !== 2) {
|
||||||
|
state = 2;
|
||||||
|
} else {
|
||||||
|
state = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
accordion: state
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick3() {
|
||||||
|
let state = "";
|
||||||
|
|
||||||
|
if (this.state.accordion !== 3) {
|
||||||
|
state = 3;
|
||||||
|
} else {
|
||||||
|
state = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
accordion: state
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClick4() {
|
||||||
|
let state = "";
|
||||||
|
|
||||||
|
if (this.state.accordion !== 4) {
|
||||||
|
state = 4;
|
||||||
|
} else {
|
||||||
|
state = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
accordion: state
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div id="maincontent">
|
||||||
|
<section data-spy="scroll" data-target="#mainNav" id="services">
|
||||||
|
<div className="containerfix">
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-md-10 mx-md-auto">
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
block
|
||||||
|
color="primary"
|
||||||
|
onClick={this.onClick1}
|
||||||
|
style={{ marginBottom: "1rem" }}>
|
||||||
|
Presentations
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<Collapse isOpen={this.state.accordion === 1}>
|
||||||
|
<div class="list-group">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/presentation/d/1oYQxlKIzNHb-F07PJ04xsK0jIJcduIzc-4HMpbqAw0o/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Slides (ES) - Google Slides (for Meetups and
|
||||||
|
Workshops etc) in Spanish
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/presentation/d/1oYQxlKIzNHb-F07PJ04xsK0jIJcduIzc-4HMpbqAw0o/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/presentation/d/1HgYeEQ0NUeHesnX1Xy4OUi9Nng4P9O4-yH_7fWnwF6Q/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Slides (EN) - Here is a nice powerpoint (Google
|
||||||
|
Slides actually) that you can copy and edit to your
|
||||||
|
liking for PalmPay Meetups, Workshops, etc.
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/presentation/d/1HgYeEQ0NUeHesnX1Xy4OUi9Nng4P9O4-yH_7fWnwF6Q/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/spreadsheets/d/1um5BJiI4infLVBFzsNFG4aV_hGuVAluWztI0UIT0oL4/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
FAQ (EN, ES, GR, and RU) - These are the most common
|
||||||
|
questions that people ask about PalmPay
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/spreadsheets/d/1um5BJiI4infLVBFzsNFG4aV_hGuVAluWztI0UIT0oL4/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</Collapse>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
block
|
||||||
|
color="primary"
|
||||||
|
onClick={this.onClick2}
|
||||||
|
style={{ marginBottom: "1rem" }}>
|
||||||
|
Flyers
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<Collapse isOpen={this.state.accordion === 2}>
|
||||||
|
<div class="list-group">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/document/d/1JwFRD3mszf9RoTlthp9lkfQdbGmdrWwGDcBP3yXLrpM/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Affordable Flyers (EN) - Single-page flyers in
|
||||||
|
English
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/document/d/1JwFRD3mszf9RoTlthp9lkfQdbGmdrWwGDcBP3yXLrpM/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/document/d/11FMi5_iMWOUDHKnoWWEn4jyzwleWkdLvvPr3KrhmJHA/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Affordable Flyers (ES) - Single-page flyers in
|
||||||
|
Spanish
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/document/d/11FMi5_iMWOUDHKnoWWEn4jyzwleWkdLvvPr3KrhmJHA/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/document/d/1Qk5sX-KmwrCrDWsDxcLpe1xXFVWhOUP4VykURXBHRCk/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Affordable Flyers (KO) - Single-page flyers in
|
||||||
|
Korean
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/document/d/1Qk5sX-KmwrCrDWsDxcLpe1xXFVWhOUP4VykURXBHRCk/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/document/d/13ObHTeIOY6KrAH4nOhNGiCITOArSxTATCJ0oCy0E-kc/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Affordable Flyers (NL) - Single-page flyers in Dutch
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/document/d/13ObHTeIOY6KrAH4nOhNGiCITOArSxTATCJ0oCy0E-kc/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/document/d/1YHZJTXZSI_OWw633gVVHc3TBQphHxAKP2v9YKRnhHy8/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Affordable Flyers (RO) - Single-page flyers in
|
||||||
|
Romanian
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/document/d/1YHZJTXZSI_OWw633gVVHc3TBQphHxAKP2v9YKRnhHy8/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/document/d/1hdXKoZvYeFJ8FDRYIT7kdNxvB84G-yVe6_1wZh2uuFo/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Affordable Flyers (VI) - Single-page flyers in
|
||||||
|
Vietnamese
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/document/d/1hdXKoZvYeFJ8FDRYIT7kdNxvB84G-yVe6_1wZh2uuFo/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/drawings/d/10mf7scN4ldCoXy8alz7UCkzt7N3tTQwJWS81zXfNMxs/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Tri-Fold Flyers (EN, back) - These English flyers
|
||||||
|
explain Bitshares and PalmPay, great for events and
|
||||||
|
meetups, etc.
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/drawings/d/10mf7scN4ldCoXy8alz7UCkzt7N3tTQwJWS81zXfNMxs/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/drawings/d/1T3mDxaa7U0IOaD251yNwNiqI_9Fier7QgtnBm3hCzyI/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Tri-Fold Flyers (EN, front) - These English flyers
|
||||||
|
explain Bitshares and PalmPay, great for events and
|
||||||
|
meetups, etc.
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/drawings/d/1T3mDxaa7U0IOaD251yNwNiqI_9Fier7QgtnBm3hCzyI/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/drawings/d/1vRLtzCuEOQ04T4iofOxU3pAtZ3GSmQwJXRISd-6NMxs/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Tri-Fold Flyers (GR, back) - These Greek flyers
|
||||||
|
explain Bitshares and PalmPay, great for events and
|
||||||
|
meetups, etc.
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/drawings/d/1vRLtzCuEOQ04T4iofOxU3pAtZ3GSmQwJXRISd-6NMxs/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/drawings/d/1_aRidERnsw7080Hqe9CjvtvmuZv3MQWTX30G9exMEa0/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Tri-Fold Flyers (GR, front) - These Greek flyers
|
||||||
|
explain Bitshares and PalmPay, great for events and
|
||||||
|
meetups, etc.
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/drawings/d/1_aRidERnsw7080Hqe9CjvtvmuZv3MQWTX30G9exMEa0/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</Collapse>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
block
|
||||||
|
color="primary"
|
||||||
|
onClick={this.onClick3}
|
||||||
|
style={{ marginBottom: "1rem" }}>
|
||||||
|
Business Cards
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<Collapse isOpen={this.state.accordion === 3}>
|
||||||
|
<div class="list-group">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/drawings/d/1zRdI_8tPXOoHi7SuM4RCkUezGQVzfPyMp3hUweYEL1s/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Front - Please do not edit the front of the business
|
||||||
|
cards
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/drawings/d/1zRdI_8tPXOoHi7SuM4RCkUezGQVzfPyMp3hUweYEL1s/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://docs.google.com/drawings/d/1dwr31i0Wgh2j9737JyH4OTjix4w31J3mdBA9iCNZ6zs/edit?usp=sharing"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Back - Feel free to edit the back of these cards all
|
||||||
|
you like
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">
|
||||||
|
https://docs.google.com/drawings/d/1dwr31i0Wgh2j9737JyH4OTjix4w31J3mdBA9iCNZ6zs/edit?usp=sharing
|
||||||
|
</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</Collapse>
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
block
|
||||||
|
color="primary"
|
||||||
|
onClick={this.onClick4}
|
||||||
|
style={{ marginBottom: "1rem" }}>
|
||||||
|
Promotional Displays
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<Collapse isOpen={this.state.accordion === 4}>
|
||||||
|
<div class="list-group">
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
href="https://keybase.io/team/Agorise"
|
||||||
|
class="list-group-item list-group-item-action flex-column align-items-start">
|
||||||
|
<div class="d-flex w-100 justify-content-between">
|
||||||
|
<h5 class="mb-1">
|
||||||
|
Logos, Advertising images, Stickers and Merchandise,
|
||||||
|
etc. (in the /PalmPay folder)
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<p class="mb-1">https://keybase.io/team/Agorise</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</Collapse>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MarketingPage;
|
117
client/src/registerServiceWorker.js
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
// In production, we register a service worker to serve assets from local cache.
|
||||||
|
|
||||||
|
// This lets the app load faster on subsequent visits in production, and gives
|
||||||
|
// it offline capabilities. However, it also means that developers (and users)
|
||||||
|
// will only see deployed updates on the "N+1" visit to a page, since previously
|
||||||
|
// cached resources are updated in the background.
|
||||||
|
|
||||||
|
// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
|
||||||
|
// This link also includes instructions on opting out of this behavior.
|
||||||
|
|
||||||
|
const isLocalhost = Boolean(
|
||||||
|
window.location.hostname === 'localhost' ||
|
||||||
|
// [::1] is the IPv6 localhost address.
|
||||||
|
window.location.hostname === '[::1]' ||
|
||||||
|
// 127.0.0.1/8 is considered localhost for IPv4.
|
||||||
|
window.location.hostname.match(
|
||||||
|
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
export default function register() {
|
||||||
|
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
|
||||||
|
// The URL constructor is available in all browsers that support SW.
|
||||||
|
const publicUrl = new URL(process.env.PUBLIC_URL, window.location);
|
||||||
|
if (publicUrl.origin !== window.location.origin) {
|
||||||
|
// Our service worker won't work if PUBLIC_URL is on a different origin
|
||||||
|
// from what our page is served on. This might happen if a CDN is used to
|
||||||
|
// serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('load', () => {
|
||||||
|
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
|
||||||
|
|
||||||
|
if (isLocalhost) {
|
||||||
|
// This is running on localhost. Lets check if a service worker still exists or not.
|
||||||
|
checkValidServiceWorker(swUrl);
|
||||||
|
|
||||||
|
// Add some additional logging to localhost, pointing developers to the
|
||||||
|
// service worker/PWA documentation.
|
||||||
|
navigator.serviceWorker.ready.then(() => {
|
||||||
|
console.log(
|
||||||
|
'This web app is being served cache-first by a service ' +
|
||||||
|
'worker. To learn more, visit https://goo.gl/SC7cgQ'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Is not local host. Just register service worker
|
||||||
|
registerValidSW(swUrl);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function registerValidSW(swUrl) {
|
||||||
|
navigator.serviceWorker
|
||||||
|
.register(swUrl)
|
||||||
|
.then(registration => {
|
||||||
|
registration.onupdatefound = () => {
|
||||||
|
const installingWorker = registration.installing;
|
||||||
|
installingWorker.onstatechange = () => {
|
||||||
|
if (installingWorker.state === 'installed') {
|
||||||
|
if (navigator.serviceWorker.controller) {
|
||||||
|
// At this point, the old content will have been purged and
|
||||||
|
// the fresh content will have been added to the cache.
|
||||||
|
// It's the perfect time to display a "New content is
|
||||||
|
// available; please refresh." message in your web app.
|
||||||
|
console.log('New content is available; please refresh.');
|
||||||
|
} else {
|
||||||
|
// At this point, everything has been precached.
|
||||||
|
// It's the perfect time to display a
|
||||||
|
// "Content is cached for offline use." message.
|
||||||
|
console.log('Content is cached for offline use.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Error during service worker registration:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkValidServiceWorker(swUrl) {
|
||||||
|
// Check if the service worker can be found. If it can't reload the page.
|
||||||
|
fetch(swUrl)
|
||||||
|
.then(response => {
|
||||||
|
// Ensure service worker exists, and that we really are getting a JS file.
|
||||||
|
if (
|
||||||
|
response.status === 404 ||
|
||||||
|
response.headers.get('content-type').indexOf('javascript') === -1
|
||||||
|
) {
|
||||||
|
// No service worker found. Probably a different app. Reload the page.
|
||||||
|
navigator.serviceWorker.ready.then(registration => {
|
||||||
|
registration.unregister().then(() => {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Service worker found. Proceed as normal.
|
||||||
|
registerValidSW(swUrl);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
console.log(
|
||||||
|
'No internet connection found. App is running in offline mode.'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function unregister() {
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.ready.then(registration => {
|
||||||
|
registration.unregister();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -3942,7 +3942,7 @@ a:not([href]):not([tabindex]), a:not([href]):not([tabindex]):focus, a:not([href]
|
||||||
padding-bottom: 1.5rem !important; }
|
padding-bottom: 1.5rem !important; }
|
||||||
|
|
||||||
.p-5 {
|
.p-5 {
|
||||||
padding: 3rem; }
|
padding: 3rem !important; }
|
||||||
|
|
||||||
.pt-5 {
|
.pt-5 {
|
||||||
padding-top: 3rem !important; }
|
padding-top: 3rem !important; }
|
|
@ -66,7 +66,7 @@ p {
|
||||||
color: rgba(255, 255, 255, 0.7); }
|
color: rgba(255, 255, 255, 0.7); }
|
||||||
|
|
||||||
section {
|
section {
|
||||||
padding: 50px 0; }
|
padding: 8rem 0; }
|
||||||
|
|
||||||
.section-heading {
|
.section-heading {
|
||||||
margin-top: 0; }
|
margin-top: 0; }
|
||||||
|
@ -163,9 +163,7 @@ img::-moz-selection {
|
||||||
padding-top: 0px;
|
padding-top: 0px;
|
||||||
padding-bottom: 0px; }
|
padding-bottom: 0px; }
|
||||||
#mainNav .navbar-brand .logo1 {
|
#mainNav .navbar-brand .logo1 {
|
||||||
/*display: none !important;*/
|
display: none !important; }
|
||||||
width: 223px;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-brand .logo2 {
|
#mainNav .navbar-brand .logo2 {
|
||||||
display: inline !important; } }
|
display: inline !important; } }
|
||||||
@media (min-width: 992px) {
|
@media (min-width: 992px) {
|
||||||
|
@ -206,7 +204,7 @@ img::-moz-selection {
|
||||||
header.masthead {
|
header.masthead {
|
||||||
padding-top: 10rem;
|
padding-top: 10rem;
|
||||||
padding-bottom: calc(10rem - 56px);
|
padding-bottom: calc(10rem - 56px);
|
||||||
background-image: url("../img/header/header-bg.jpg");
|
background-image: url("../img/header-bg.jpg");
|
||||||
background-position: center center;
|
background-position: center center;
|
||||||
-webkit-background-size: cover;
|
-webkit-background-size: cover;
|
||||||
-moz-background-size: cover;
|
-moz-background-size: cover;
|
||||||
|
@ -295,8 +293,8 @@ header.masthead {
|
||||||
|
|
||||||
.copyright {
|
.copyright {
|
||||||
background-color: #212529;
|
background-color: #212529;
|
||||||
/*padding-left: 6rem;
|
padding-left: 6rem;
|
||||||
padding-right: 6rem;*/
|
padding-right: 6rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.social-buttons {
|
ul.social-buttons {
|
||||||
|
@ -328,10 +326,10 @@ ul.social-buttons {
|
||||||
justify-content: center; }
|
justify-content: center; }
|
||||||
|
|
||||||
.fa-dtube {
|
.fa-dtube {
|
||||||
background-image: url("../img/footer/dtube.png") no-repeat 0 0; }
|
background-image: url("../img/dtube.png") no-repeat 0 0; }
|
||||||
|
|
||||||
.fa-steemit {
|
.fa-steemit {
|
||||||
background-image: url("../img/footer/steemit.png") no-repeat 0 0; }
|
background-image: url("../img/steemit.png") no-repeat 0 0; }
|
||||||
|
|
||||||
.testimonial-item i {
|
.testimonial-item i {
|
||||||
font-size: 80px;
|
font-size: 80px;
|
||||||
|
@ -352,73 +350,3 @@ ul.social-buttons {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.search-books-input-wrapper {
|
|
||||||
margin-left: 0 !important;
|
|
||||||
}
|
|
||||||
#testimonies .container .row > div {
|
|
||||||
border: none !important;
|
|
||||||
}
|
|
||||||
.ambassadorsTitle {
|
|
||||||
margin-top: 0 !important;
|
|
||||||
}
|
|
||||||
.about.bg-secondary > div {
|
|
||||||
padding-left: 0 !important;
|
|
||||||
padding-right: 0 !important;
|
|
||||||
}
|
|
||||||
.ambassadorsTitle {
|
|
||||||
margin-top: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (min-width: 328px) {
|
|
||||||
.ambassadorsTitle {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.marketingMargin {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.merchantsMargin {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
text-align: left !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav p {
|
|
||||||
margin-left: 0 !important;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
header .col-md-10, header .col-md-10 > div {
|
|
||||||
padding-left: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-books-input-wrapper > div {
|
|
||||||
margin-left: 0 !important;
|
|
||||||
}
|
|
||||||
.text-box-top {
|
|
||||||
margin-top: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-box-bottom {
|
|
||||||
margin-bottom: 60px;
|
|
||||||
}
|
|
||||||
.uppercase-text {
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
|
|
||||||
.row {
|
|
||||||
margin-right: 0 !important;
|
|
||||||
margin-left: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box-search {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box-search > div {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 434 KiB After Width: | Height: | Size: 434 KiB |
BIN
client/src/static/img/dtube.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
client/src/static/img/header-bg.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
client/src/static/img/steemit.png
Normal file
After Width: | Height: | Size: 362 B |
7173
client/yarn.lock
Normal file
1
faviconData.json
Normal file
67
faviconDescription.json
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
{
|
||||||
|
"masterPicture": "public/img/PalmPay900.png",
|
||||||
|
"iconsPath": "/",
|
||||||
|
"design": {
|
||||||
|
"ios": {
|
||||||
|
"masterPicture": "public/img/PalmPay900white.png",
|
||||||
|
"pictureAspect": "backgroundAndMargin",
|
||||||
|
"backgroundColor": "#128f52",
|
||||||
|
"margin": "14%",
|
||||||
|
"assets": {
|
||||||
|
"ios6AndPriorIcons": true,
|
||||||
|
"ios7AndLaterIcons": true,
|
||||||
|
"precomposedIcons": false,
|
||||||
|
"declareOnlyDefaultIcon": true
|
||||||
|
},
|
||||||
|
"appName": "PalmPay"
|
||||||
|
},
|
||||||
|
"desktopBrowser": {},
|
||||||
|
"windows": {
|
||||||
|
"pictureAspect": "whiteSilhouette",
|
||||||
|
"backgroundColor": "#128f52",
|
||||||
|
"onConflict": "override",
|
||||||
|
"assets": {
|
||||||
|
"windows80Ie10Tile": true,
|
||||||
|
"windows10Ie11EdgeTiles": {
|
||||||
|
"small": true,
|
||||||
|
"medium": true,
|
||||||
|
"big": true,
|
||||||
|
"rectangle": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"appName": "PalmPay"
|
||||||
|
},
|
||||||
|
"androidChrome": {
|
||||||
|
"pictureAspect": "shadow",
|
||||||
|
"themeColor": "#29b872",
|
||||||
|
"manifest": {
|
||||||
|
"name": "PalmPay",
|
||||||
|
"startUrl": "http://www.palmpay.io/",
|
||||||
|
"display": "standalone",
|
||||||
|
"orientation": "notSet",
|
||||||
|
"onConflict": "override",
|
||||||
|
"declared": true
|
||||||
|
},
|
||||||
|
"assets": {
|
||||||
|
"legacyIcon": true,
|
||||||
|
"lowResolutionIcons": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"safariPinnedTab": {
|
||||||
|
"pictureAspect": "silhouette",
|
||||||
|
"themeColor": "#128f52"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"compression": 5,
|
||||||
|
"scalingAlgorithm": "Lanczos",
|
||||||
|
"errorOnImageTooSmall": false,
|
||||||
|
"readmeFile": false,
|
||||||
|
"htmlCodeFile": true,
|
||||||
|
"usePathAsIs": false
|
||||||
|
},
|
||||||
|
"versioning": {
|
||||||
|
"paramName": "v4",
|
||||||
|
"paramValue": "eE58gaorm5"
|
||||||
|
}
|
||||||
|
}
|
8
generatessl
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "Generating SSL..."
|
||||||
|
cd /root/website
|
||||||
|
greenlock certonly --webroot-path public \
|
||||||
|
--acme-version draft-11 --acme-url https://acme-v02.api.letsencrypt.org/directory \
|
||||||
|
--agree-tos --email <EMAIL> --domains < --domains palmpay.io,www.palmpay.io <- example > \
|
||||||
|
--community-member \
|
||||||
|
--config-dir ./acme/etc
|
10
howtogeneratefavicon.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
Generate your icons:
|
||||||
|
mkdir outputDir
|
||||||
|
real-favicon generate faviconDescription.json faviconData.json outputDir
|
||||||
|
|
||||||
|
Inject the HTML code in your pages:
|
||||||
|
real-favicon inject faviconData.json outputDir client/public/*.html
|
||||||
|
|
||||||
|
|
||||||
|
Check for updates (to be run from time to time, ideally by your continuous integration system):
|
||||||
|
real-favicon check-for-update --fail-on-update faviconData.json
|
42
package.json
|
@ -1,35 +1,19 @@
|
||||||
{
|
{
|
||||||
"name": "client",
|
"name": "palmpay",
|
||||||
"version": "1.0.0",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
|
||||||
"@feathersjs/client": "^3.7.2",
|
|
||||||
"@material-ui/core": "^3.1.0",
|
|
||||||
"@material-ui/icons": "^3.0.1",
|
|
||||||
"bootstrap": "^4.1.3",
|
|
||||||
"country-list": "^1.1.0",
|
|
||||||
"font-awesome": "^4.7.0",
|
|
||||||
"mdbreact": "^4.7.1",
|
|
||||||
"react": "^16.5.2",
|
|
||||||
"react-dom": "^16.5.2",
|
|
||||||
"react-google-maps": "^9.4.5",
|
|
||||||
"react-intl": "^2.6.0",
|
|
||||||
"react-modal": "^3.5.1",
|
|
||||||
"react-ripples": "^1.1.2",
|
|
||||||
"react-scripts": "^1.1.5",
|
|
||||||
"react-scroll": "^1.7.10",
|
|
||||||
"recompose": "^0.30.0",
|
|
||||||
"sort-by": "^1.2.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start:dev": "set PORT=3001 && node bin/wwwdev",
|
||||||
"build": "react-scripts build",
|
"start": "set PORT=3000 && node bin/www"
|
||||||
"test": "react-scripts test --env=jsdom --watchAll",
|
|
||||||
"eject": "react-scripts eject"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"dependencies": {
|
||||||
"babel-eslint": "^9.0.0",
|
"compression": "^1.7.2",
|
||||||
"eslint": "^5.6.0",
|
"cookie-parser": "~1.4.3",
|
||||||
"eslint-plugin-react": "^7.11.1"
|
"debug": "~2.6.9",
|
||||||
|
"express": "~4.16.0",
|
||||||
|
"greenlock-express": "^2.1.6",
|
||||||
|
"http-errors": "~1.6.2",
|
||||||
|
"jade": "~1.11.0",
|
||||||
|
"morgan": "~1.9.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
public/PalmPayIO.png
Normal file
After Width: | Height: | Size: 540 KiB |
BIN
public/android-chrome-144x144.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
public/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
public/android-chrome-256x256.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
public/android-chrome-36x36.png
Normal file
After Width: | Height: | Size: 590 B |
BIN
public/android-chrome-384x384.png
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
public/android-chrome-48x48.png
Normal file
After Width: | Height: | Size: 778 B |
BIN
public/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
public/android-chrome-72x72.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
public/android-chrome-96x96.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
public/apple-touch-icon-114x114.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
public/apple-touch-icon-120x120.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
public/apple-touch-icon-144x144.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
public/apple-touch-icon-152x152.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
public/apple-touch-icon-180x180.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
public/apple-touch-icon-57x57.png
Normal file
After Width: | Height: | Size: 873 B |
BIN
public/apple-touch-icon-60x60.png
Normal file
After Width: | Height: | Size: 913 B |
BIN
public/apple-touch-icon-72x72.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
public/apple-touch-icon-76x76.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
public/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
|
@ -1 +0,0 @@
|
||||||
4239a644-5b44-3510-add9-eeedbf060fee
|
|