Compare commits

...

No commits in common. "master" and "original-version" have entirely different histories.

286 changed files with 52913 additions and 4394 deletions

View File

@ -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
View File

@ -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/

View File

@ -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
View 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
View 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
View 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
View 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
View 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
View 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"
}

View File

@ -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
View 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>
&copy; 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
View 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>&copy; 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
View 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;

View 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;

View File

@ -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;

View File

@ -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
View 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();

View 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;
}

View 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. Lets 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), thats
literally all you need. No other hardware is needed. If
desired, dont 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">
Theyre the bank that never closes, never needs a
bailout, and can never steal your money. Bitshares is
not a company. Its 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. &#9733;&#9733;&#9733;&#9733;&#9733;</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. &#9733;&#9733;&#9733;&#9733;&#9733;</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. &#9733;&#9733;&#9733;&#9733;&#9733;</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. &#9733;&#9733;&#9733;&#9733;&#9734;</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. &#9733;&#9733;&#9733;&#9733;&#9733;
</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. &#9733;&#9733;&#9733;&#9733;&#9733;</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;

View 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;

View 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();
});
}
}

View File

@ -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; }

View File

@ -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;
}

View File

Before

Width:  |  Height:  |  Size: 434 KiB

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

7173
client/yarn.lock Normal file

File diff suppressed because it is too large Load Diff

1
faviconData.json Normal file

File diff suppressed because one or more lines are too long

67
faviconDescription.json Normal file
View 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
View 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
View 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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1 +0,0 @@
4239a644-5b44-3510-add9-eeedbf060fee

Some files were not shown because too many files have changed in this diff Show More