commit 9c9700cf95abb9c0e20d1e21c89fb84c337c2916 Author: David Date: Sun Aug 5 05:19:40 2018 +0430 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dfc4856 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.key +*.crt +*.pem +client/src/static/disabled/ +node_modules/ +outputDir/ +client/package-lock.json +package-lock.json +public/img/.tinypng-sigs diff --git a/app.js b/app.js new file mode 100644 index 0000000..94f8d1d --- /dev/null +++ b/app.js @@ -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; diff --git a/appdev.js b/appdev.js new file mode 100644 index 0000000..01d9519 --- /dev/null +++ b/appdev.js @@ -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; diff --git a/bin/www b/bin/www new file mode 100644 index 0000000..555a2cc --- /dev/null +++ b/bin/www @@ -0,0 +1,94 @@ +#!/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"); + +var ssl_options = { + key: fs.readFileSync("./domain.key"), + cert: fs.readFileSync("./domain.crt"), + ca: fs.readFileSync("./intermediate.pem") +}; + +/** + * 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); +} diff --git a/bin/wwwdev b/bin/wwwdev new file mode 100644 index 0000000..a4a4c20 --- /dev/null +++ b/bin/wwwdev @@ -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); +} diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..d30f40e --- /dev/null +++ b/client/.gitignore @@ -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* diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..c587aca --- /dev/null +++ b/client/package.json @@ -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" +} diff --git a/client/public/index.html b/client/public/index.html new file mode 100644 index 0000000..2a2f094 --- /dev/null +++ b/client/public/index.html @@ -0,0 +1,93 @@ + + + + + + PalmPay + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/src/App.js b/client/src/App.js new file mode 100644 index 0000000..e3da715 --- /dev/null +++ b/client/src/App.js @@ -0,0 +1,361 @@ +import React from "react"; +import { + Navbar, + NavbarNav, + NavbarToggler, + Collapse, + NavItem, + Footer, + NavLink, + Row, + Col, + Container, + Modal, + ModalBody, + ModalHeader +} from "mdbreact"; +import { BrowserRouter as Router } from "react-router-dom"; +import { Link, Events, animateScroll as scroll, scrollSpy } from "react-scroll"; + +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 = ( +
+ ); + return ( + + + {!currentPath.includes("marketing") ? ( + + + + ) : ( + + + + )} + {collapsed && overlay} + + + +
+
+ + + + + + + + + +

+ FASTER AND SAFER THAN CASH +

+ +
+ +
+
+
+
+

+ + 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: + + {" "} + http://t.me/Agorise + + +

+
+
+
+
+
+ + © Copyright {new Date().getFullYear()}{" "} + + {" "} + Agorise Ltd.{" "} + + +
+
+ +
+
+ + Site by:{" "} + + poqdavid + + +
+
+
+
+
+
+ + + + Downloads + + + + + + + +
+
+ ); + } +} + +export default App; diff --git a/client/src/App.test.js b/client/src/App.test.js new file mode 100644 index 0000000..24bbff8 --- /dev/null +++ b/client/src/App.test.js @@ -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 =
+ return ( + +
+ + + + + + + + + + + + Services + + + About + + + Testimonies + + + Downloads + + + + +
    +
    +
    +
    + { collapsed && overlay} + + + + + + +
    +
    +
    +
    +

    + + 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: + http://t.me/Agorise + +

    +
    + + +
    +
    + +
    +
    + + © Copyright {(new Date().getFullYear())} Agorise Ltd. + +
    + +
    + +
    +
    + + + Downloads + + + + +
    +
    + ); + } +} + +export default App; diff --git a/client/src/Routes.js b/client/src/Routes.js new file mode 100644 index 0000000..9263818 --- /dev/null +++ b/client/src/Routes.js @@ -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 ( + + {/* FREE */} + + + Not Found; + }} + /> + + ); + } +} + +export default Routes; diff --git a/client/src/index.css b/client/src/index.css new file mode 100644 index 0000000..33ea5cd --- /dev/null +++ b/client/src/index.css @@ -0,0 +1,97 @@ +/* #apppage .gradient { + background: -moz-linear-gradient(45deg, rgba(213, 15, 61, 0.6), rgba(13, 17, 198, 0.69) 100%); + background: -webkit-linear-gradient(45deg, rgba(213, 15, 61, 0.6), rgba(13, 17, 198, 0.69) 100%); + background: linear-gradient(to 45deg, rgba(213, 15, 61, 0.6), rgba(13, 17, 198, 0.69) 100%); +} */ + +#maincontent { + min-height: 100%; +} +#apppage { + min-height: 100%; +} +#apppage h6 { + line-height: 1.7; +} +.footer { + position: relative; + clear: both; +} +.collapse.show { + padding-bottom: 20px; +} +#apppage .navbar { + transition: background 0.5s ease-in-out, padding 0.5s ease-in-out; + box-shadow: 0px 0px !important; +} + +#apppage .top-nav-collapse { + background: #128f52 !important; + padding-top: 0px !important; + padding-bottom: 0px !important; +} + +@media (max-width: 768px) { + #apppage .navbar:not(.top-nav-collapse) { + background: #128f52 !important; + padding-top: 0px !important; + padding-bottom: 0px !important; + } +} + +strong.important { + font-weight: 700 !important; +} + +.testimonialc { + margin-bottom: 100px; +} + +.carousel-item i { + font-size: 80px; + color: #128f52; + padding-bottom: 15px; +} + +.testimonialc .carousel-item-next, +.testimonialc .carousel-item-prev, +.testimonialc .carousel-item.active { + display: block; +} +.testimonialc .carousel-indicators li { + height: 16px; + width: 16px; + max-width: 16px; + background-color: #3a3a3a; + margin-bottom: -60px; +} +.testimonialc .carousel-indicators .active { + height: 20px; + width: 20px; + max-width: 20px; + background-color: #71ad37; + -webkit-border-radius: 50%; + border-radius: 50%; +} + +.testimonialc .controls-top .btn-floating { + background: #4285f4; +} +.testimonialc .carousel-indicators { + margin-bottom: -5em; +} +.testimonialc .card { + margin: 1px; +} +.testimonialc .card-cascade.narrower { + margin-top: 20px; + margin-bottom: 5px; +} +@media only screen and (max-width: 992px) { + .testimonialc .carousel-indicators li { + margin-bottom: -30px; + } +} +#testimonies { + padding: 14rem 0 !important; +} diff --git a/client/src/index.js b/client/src/index.js new file mode 100644 index 0000000..2fa69a2 --- /dev/null +++ b/client/src/index.js @@ -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(, document.getElementById("root")); + +registerServiceWorker(); diff --git a/client/src/pages/HomePage.css b/client/src/pages/HomePage.css new file mode 100644 index 0000000..4cd08cf --- /dev/null +++ b/client/src/pages/HomePage.css @@ -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; +} diff --git a/client/src/pages/HomePage.js b/client/src/pages/HomePage.js new file mode 100644 index 0000000..46716e2 --- /dev/null +++ b/client/src/pages/HomePage.js @@ -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 ( + + + + + + +

    + + + Accept any Digital Currency at Zero Cost + + +

    +
    + + +

    + + Cryptocurrencies bring Global Sales; Bitcoin Cash, bitUSD, + bitEUR, bitRUB, bitXCD, bitSilver, Steem, Litecoin and + more + +

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    + + 100% FREE Crypto Point-Of-Sale Software for any Business + +

    +
    +
    +
    +
    +
    +
    +
    +
    + + Retail + +

    + Retail +

    +
    +
    + +
    +
    + + Cafe/Bars + +

    + Cafe/Bars +

    +
    +
    + +
    +
    + + Restaurants + +

    + Restaurants +

    +
    +
    + +
    +
    + + Gas Stations + +

    + Gas Stations +

    +
    +
    + +
    +
    + + Bill-Pay Counters + +

    + Bill-Pay Counters +

    +
    +
    + +
    +
    + + Grocery + +

    + Grocery +

    +
    +
    + +
    +
    + + Delivery Drivers + +

    + Delivery Drivers +

    +
    +
    + +
    +
    + + Phone Orders + +

    + Phone Orders +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    + + + Integrates seamlessly with Existing Systems + + +

    +

    + + + 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. + + + +
    + + + 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. + + + +
    + + + 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. + + + +
    + + + Faster and Safer than Cash. Customer transactions take 3 + seconds or less. Let’s see cash or card Customers get + through that fast! + + +

    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    + + + Mobile Payments are quicker than ever. Process your + Customer orders instantly + + +

    +

    + + + 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. + + + +
    + + + 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. + + + +
    + + + 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. + + + +
    +

    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    + + + Cryptocurrency volatility is a thing of the past + + +

    +

    + + + PalmPay instantly converts Crypto into your stable, + local currency in digital form, such as bitEUR, bitUSD, + bitJPY, bitKRW, bitRUB or even bitGold and bitSilver. + + + +
    + + + These Smartcoins are closely pegged 1:1 to their + underlying asset so that you never have to worry about + paying your bills with Crypto. + + + +
    + + + 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. + + + +
    + + + This stability is the foundation of the Blockchain My + City (BMC) + Initiative. PalmPay includes the ability to + automatically pay every Ambassador and enrolled + Government from the 0.5% that is collected from + customers. + + +

    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    + + + Unlimited, free Technical Support from PalmPay + Ambassadors + + +

    +

    + + + 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 + + http://t.me/Agorise + + + +
    + + + 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. + + +

    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    + + + Access your accounts anytime, from anywhere in the world + + +

    +

    + + + Monitor the transactions at one or more of your + Businesses in real-time. Win, Mac, or Linux. + + + +
    + + + 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. + + + +
    + + + 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! + + +

    +
    +
    +
    +
    +
    + +
    +
    + + + + + { + this.goToIndex(1); + }} + /> + { + this.goToIndex(2); + }} + /> + { + this.goToIndex(3); + }} + /> + { + this.goToIndex(4); + }} + /> + { + this.goToIndex(5); + }} + /> + { + this.goToIndex(6); + }} + /> + + + + + + +
    Erik Y. ★★★★★
    +
    + "This is awesome! We have been looking for a way to + attract new customers and this is it." +
    + +
    + + + +
    Alexey T. ★★★★★
    +

    + “Outstanding!! ” +

    + +
    + + + +
    Nikos C. ★★★★★
    +

    + “Το Palmpay είναι ένα άλλο μονοπάτι για τα κέρδη. + Απλα ΔΟΚΙΜΑΣΕ το!” +

    + +
    + + + + +
    Nadya L. ★★★★☆
    +

    + “My husband suggested this and I am so glad to be + earning crypto now!” +

    + +
    + + + + +
    + Jennifer M. ★★★★★ +
    +

    + “Please tell me I can close my bank account now. + This is amazing, thank you Agorise!” +

    + +
    + + + +
    Jose M. ★★★★★
    +

    + “Nuestros clientes de Coin Shop se han duplicado + gracias a BitSilver y Palmpay. A++” +

    + +
    +
    +
    +
    + + +
    +