Compare commits

...

No commits in common. "master" and "5c6c14fcc510d377046475acfbc8b4f25471d11a" 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. 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">
<