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.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.idea
|
||||
|
||||
*.key
|
||||
*.crt
|
||||
*.pem
|
||||
client/src/static/disabled/
|
||||
node_modules/
|
||||
outputDir/
|
||||
client/package-lock.json
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
public/img/.tinypng-sigs
|
||||
acme/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# 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..
|
||||
Matrix: http://agorise.chat
|
||||
Session: 052f99b1965cb2a54ac516d29d122f5ec7b13e30209c31e9f57f820e7008336758
|
||||
Telegram: https://t.me/Agorise
|
||||
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>
|
||||
<meta charset="utf-8">
|
||||
<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 -->
|
||||
<meta property="og:title" content="PalmPay">
|
||||
<meta property="og:type" content="website">
|
||||
<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/">
|
||||
|
||||
<!-- Twitter Card data -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<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: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="application-name" content="PalmPay">
|
||||
<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 React from "react";
|
||||
|
||||
/**
|
||||
* The header of the marketing page.
|
||||
*/
|
||||
class MarketingHeader extends React.Component {
|
||||
class MarketingNav 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);
|
||||
}
|
||||
|
@ -37,7 +33,6 @@ class MarketingHeader extends React.Component {
|
|||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<Navbar
|
||||
dark
|
||||
expand="md"
|
||||
|
@ -63,9 +58,8 @@ class MarketingHeader extends React.Component {
|
|||
</Collapse>
|
||||
</Container>
|
||||
</Navbar>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default MarketingHeader;
|
||||
export default MarketingNav;
|
|
@ -42,10 +42,10 @@
|
|||
strong.important {
|
||||
font-weight: 700 !important;
|
||||
}
|
||||
/*
|
||||
|
||||
.testimonialc {
|
||||
margin-bottom: 100px;
|
||||
}*/
|
||||
}
|
||||
|
||||
.carousel-item i {
|
||||
font-size: 80px;
|
||||
|
@ -77,7 +77,9 @@ strong.important {
|
|||
.testimonialc .controls-top .btn-floating {
|
||||
background: #4285f4;
|
||||
}
|
||||
|
||||
.testimonialc .carousel-indicators {
|
||||
margin-bottom: -5em;
|
||||
}
|
||||
.testimonialc .card {
|
||||
margin: 1px;
|
||||
}
|
||||
|
@ -91,26 +93,10 @@ strong.important {
|
|||
}
|
||||
}
|
||||
#testimonies {
|
||||
padding: 5rem 0 !important;
|
||||
padding: 14rem 0 !important;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.menuc {
|
||||
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; }
|
||||
|
||||
.p-5 {
|
||||
padding: 3rem; }
|
||||
padding: 3rem !important; }
|
||||
|
||||
.pt-5 {
|
||||
padding-top: 3rem !important; }
|
|
@ -66,7 +66,7 @@ p {
|
|||
color: rgba(255, 255, 255, 0.7); }
|
||||
|
||||
section {
|
||||
padding: 50px 0; }
|
||||
padding: 8rem 0; }
|
||||
|
||||
.section-heading {
|
||||
margin-top: 0; }
|
||||
|
@ -100,7 +100,7 @@ img::-moz-selection {
|
|||
#mainNav {
|
||||
border-bottom: 1px solid rgba(33, 37, 41, 0.1);
|
||||
background-color: #128f52;
|
||||
font-family: 'PFBeauSansPro', sans-serif !important;
|
||||
font-family: 'PFBeauSansPro', sans-serif !important;
|
||||
-webkit-transition: all 0.2s;
|
||||
-moz-transition: all 0.2s;
|
||||
transition: all 0.2s;
|
||||
|
@ -163,9 +163,7 @@ img::-moz-selection {
|
|||
padding-top: 0px;
|
||||
padding-bottom: 0px; }
|
||||
#mainNav .navbar-brand .logo1 {
|
||||
/*display: none !important;*/
|
||||
width: 223px;
|
||||
}
|
||||
display: none !important; }
|
||||
#mainNav .navbar-brand .logo2 {
|
||||
display: inline !important; } }
|
||||
@media (min-width: 992px) {
|
||||
|
@ -206,7 +204,7 @@ img::-moz-selection {
|
|||
header.masthead {
|
||||
padding-top: 10rem;
|
||||
padding-bottom: calc(10rem - 56px);
|
||||
background-image: url("../img/header/header-bg.jpg");
|
||||
background-image: url("../img/header-bg.jpg");
|
||||
background-position: center center;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
|
@ -232,9 +230,9 @@ header.masthead {
|
|||
font-size: 3rem !important; } }
|
||||
@media (min-width: 1200px) {
|
||||
.view h1 {
|
||||
font-size: 4rem !important; }
|
||||
|
||||
|
||||
font-size: 4rem !important; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
.service-box {
|
||||
|
@ -294,9 +292,9 @@ header.masthead {
|
|||
color: #fff; }
|
||||
|
||||
.copyright {
|
||||
background-color: #212529;
|
||||
/*padding-left: 6rem;
|
||||
padding-right: 6rem;*/
|
||||
background-color: #212529;
|
||||
padding-left: 6rem;
|
||||
padding-right: 6rem;
|
||||
}
|
||||
|
||||
ul.social-buttons {
|
||||
|
@ -328,10 +326,10 @@ ul.social-buttons {
|
|||
justify-content: center; }
|
||||
|
||||
.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 {
|
||||
background-image: url("../img/footer/steemit.png") no-repeat 0 0; }
|
||||
background-image: url("../img/steemit.png") no-repeat 0 0; }
|
||||
|
||||
.testimonial-item i {
|
||||
font-size: 80px;
|
||||
|
@ -350,75 +348,5 @@ ul.social-buttons {
|
|||
.pl-xl-7, .px-xl-7 {
|
||||
padding-left: 12rem !important;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
.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",
|
||||
"version": "1.0.0",
|
||||
"name": "palmpay",
|
||||
"version": "0.0.0",
|
||||
"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": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test --env=jsdom --watchAll",
|
||||
"eject": "react-scripts eject"
|
||||
"start:dev": "set PORT=3001 && node bin/wwwdev",
|
||||
"start": "set PORT=3000 && node bin/www"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-eslint": "^9.0.0",
|
||||
"eslint": "^5.6.0",
|
||||
"eslint-plugin-react": "^7.11.1"
|
||||
"dependencies": {
|
||||
"compression": "^1.7.2",
|
||||
"cookie-parser": "~1.4.3",
|
||||
"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
|