*Initial version

This commit is contained in:
Derrick Hammer 2022-05-25 21:29:59 -04:00
parent 25b6f069fe
commit 195bea0cf6
39 changed files with 13147 additions and 1 deletions

31
.github/workflows/deploy.yml vendored Normal file
View File

@ -0,0 +1,31 @@
name: Deploy
on:
pull_request:
push:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 16.x
- name: Install dependencies
run: yarn
- name: Build
run: yarn build
- name: Deploy to Skynet
uses: SkynetLabs/deploy-to-skynet-action@v2
with:
upload-dir: public
github-token: ${{ secrets.GITHUB_TOKEN }}
portal-url: https://fileportal.org
skynet-api-key: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && secrets.SKYNET_API_KEY || '' }}
registry-seed: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && secrets.REGISTRY_SEED || '' }}
registry-datakey: web3extension.com

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
node_modules/
.cache/
public

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2022 Lume Web
Copyright (c) 2022 Hammer Technologies LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

54
README.md Normal file
View File

@ -0,0 +1,54 @@
<p align="center">
<a href="https://www.gatsbyjs.com/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts">
<img alt="Gatsby" src="https://www.gatsbyjs.com/Gatsby-Monogram.svg" width="60" />
</a>
</p>
<h1 align="center">
Gatsby minimal TypeScript starter
</h1>
## 🚀 Quick start
1. **Create a Gatsby site.**
Use the Gatsby CLI to create a new site, specifying the minimal TypeScript starter.
```shell
# create a new Gatsby site using the minimal TypeScript starter
npm init gatsby
```
2. **Start developing.**
Navigate into your new sites directory and start it up.
```shell
cd my-gatsby-site/
npm run develop
```
3. **Open the code and start customizing!**
Your site is now running at http://localhost:8000!
Edit `src/pages/index.tsx` to see your site update in real-time!
4. **Learn more**
- [Documentation](https://www.gatsbyjs.com/docs/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts)
- [Tutorials](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts)
- [Guides](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts)
- [API Reference](https://www.gatsbyjs.com/docs/api-reference/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts)
- [Plugin Library](https://www.gatsbyjs.com/plugins?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts)
- [Cheat Sheet](https://www.gatsbyjs.com/docs/cheat-sheet/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter-ts)
## 🚀 Quick start (Gatsby Cloud)
Deploy this starter with one click on [Gatsby Cloud](https://www.gatsbyjs.com/cloud/):
[<img src="https://www.gatsbyjs.com/deploynow.svg" alt="Deploy to Gatsby Cloud">](https://www.gatsbyjs.com/dashboard/deploynow?url=https://github.com/gatsbyjs/gatsby-starter-minimal-ts)

2
gatsby-browser.ts Normal file
View File

@ -0,0 +1,2 @@
import "./src/css/reset.scss"
import "./src/css/style.scss"

40
gatsby-config.ts Normal file
View File

@ -0,0 +1,40 @@
import type {GatsbyConfig} from "gatsby";
const config: GatsbyConfig = {
siteMetadata: {
title: 'Lume Web Web3 Extension',
description: 'Get the browser extension that will give you free, open access into the user-owned Web3 Internet',
siteUrl: 'https://web3extension.com',
twitter: '@lumeweb3',
siteLanguage: 'en',
ogLanguage: 'en-US',
},
plugins: ["gatsby-plugin-sass", "gatsby-plugin-image", "gatsby-plugin-react-helmet", {
resolve: 'gatsby-plugin-manifest',
options: {
"icon": "src/images/icon.png"
}
}, {
resolve: 'gatsby-source-filesystem',
options: {
"name": "images",
"path": "./src/images/"
},
__key: "images"
},
`gatsby-plugin-offline`,
"gatsby-plugin-sharp",
`gatsby-transformer-sharp`,
{
resolve: `gatsby-plugin-web-font-loader`,
options: {
google: {
families: ['Roboto']
}
}
}
],
};
export default config;

41
package.json Normal file
View File

@ -0,0 +1,41 @@
{
"name": "web3-extension",
"version": "1.0.0",
"private": true,
"description": "web3-extension",
"author": "Derrick Hammer",
"keywords": [
"gatsby"
],
"scripts": {
"develop": "gatsby develop",
"start": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"gatsby": "^4.15.1",
"gatsby-plugin-image": "^2.15.0",
"gatsby-plugin-manifest": "^4.15.0",
"gatsby-plugin-offline": "^5.15.0",
"gatsby-plugin-react-helmet": "^5.15.0",
"gatsby-plugin-sass": "^5.15.0",
"gatsby-plugin-sharp": "^4.15.0",
"gatsby-plugin-web-font-loader": "^1.0.4",
"gatsby-source-filesystem": "^4.15.0",
"gatsby-transformer-sharp": "^4.15.0",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-helmet": "^6.1.0",
"sass": "^1.52.1"
},
"devDependencies": {
"@types/node": "^17.0.35",
"@types/react": "^18.0.9",
"@types/react-dom": "^18.0.4",
"@types/react-helmet": "^6.1.5",
"typescript": "^4.6.4"
}
}

23
src/components/Header.tsx Normal file
View File

@ -0,0 +1,23 @@
import React from "react"
import {Link} from "gatsby"
import PropTypes from "prop-types"
import {StaticImage} from "gatsby-plugin-image";
const Header = () => (
<div className="header">
<Link to={"/"}><StaticImage src={"../images/logo.png"} alt={"Lume Web"} className={"logo"}/> </Link>
<Link to={"/donate"}>
<button className="donate-btn">Donate</button>
</Link>
</div>
)
Header.propTypes = {
siteTitle: PropTypes.string,
}
Header.defaultProps = {
siteTitle: ``,
}
export default Header

49
src/components/Layout.tsx Normal file
View File

@ -0,0 +1,49 @@
import React from "react"
import {graphql, StaticQuery} from "gatsby";
import Header from "./Header";
import {StaticImage} from "gatsby-plugin-image";
import SEO from "./SEO";
// @ts-ignore
export default function Layout({children}) {
return (
<>
<SEO/>
<div className={"content-container"}>
<StaticQuery
query={graphql`
query SiteTitleQuery {
site {
siteMetadata {
title
}
}
}
`}
render={data => (
<>
<Header siteTitle={data.site.siteMetadata.title}/>
{children}
<section className="section-footer">
<div className="footer-divider">
<a href="https://lumeweb.com"><StaticImage src={"../images/icon.png"}
className="logo"
alt="Lume Web"/></a>
</div>
<footer>
<div className="company">
<p>Hammer Technologies LLC</p>
</div>
<div className="github">
<StaticImage src={"../images/icon-github.png"} alt="Github icon"/>
<a href="https://github.com/LumeWeb/web3extension.com" target="_blank">View on
Github</a>
</div>
</footer>
</section>
</>
)}/>
</div>
</>
)
}

View File

@ -0,0 +1,34 @@
import PropTypes from 'prop-types'
import React from 'react'
import { Helmet } from 'react-helmet'
// @ts-ignore
const Facebook = ({ url, name, type, title, desc, image, locale }) => (
<Helmet>
{name && <meta property="og:site_name" content={name} />}
<meta property="og:locale" content={locale} />
<meta property="og:url" content={url} />
<meta property="og:type" content={type} />
<meta property="og:title" content={title} />
<meta property="og:description" content={desc} />
<meta property="og:image" content={image} />
<meta property="og:image:alt" content={desc} />
</Helmet>
)
export default Facebook
Facebook.propTypes = {
url: PropTypes.string.isRequired,
locale: PropTypes.string.isRequired,
type: PropTypes.string,
title: PropTypes.string.isRequired,
desc: PropTypes.string.isRequired,
image: PropTypes.string.isRequired,
name: PropTypes.string,
}
Facebook.defaultProps = {
type: 'website',
name: null,
}

View File

@ -0,0 +1,89 @@
import React from 'react'
import {Helmet} from "react-helmet"
import PropTypes from 'prop-types'
import {useStaticQuery, graphql} from 'gatsby'
import Facebook from './Facebook'
import Twitter from './Twitter'
// @ts-ignore
const SEO = ({title, desc, banner, pathname}) => {
const {site, file} = useStaticQuery(query)
const {
siteMetadata: {
siteUrl,
defaultTitle,
defaultDescription,
siteLanguage,
ogLanguage,
twitter,
},
} = site
const seo = {
title: title || defaultTitle,
description: desc || defaultDescription,
image: `${siteUrl}${banner || file.childImageSharp.resize.src}`,
url: `${siteUrl}${pathname || ''}`,
}
return (
<>
<Helmet title={seo.title}>
<html lang={siteLanguage}/>
<meta name="description" content={seo.description}/>
<meta name="image" content={seo.image}/>
</Helmet>
<Facebook
desc={seo.description}
image={seo.image}
title={seo.title}
type={'website'}
url={seo.url}
locale={ogLanguage}
/>
<Twitter title={seo.title} image={seo.image} desc={seo.description} username={twitter}/>
</>
)
}
export default SEO
SEO.propTypes = {
title: PropTypes.string,
desc: PropTypes.string,
banner: PropTypes.string,
pathname: PropTypes.string,
article: PropTypes.bool,
node: PropTypes.object,
}
SEO.defaultProps = {
title: null,
desc: null,
banner: null,
pathname: null,
article: false,
node: null,
}
const query = graphql`
query {
site {
siteMetadata {
siteUrl
defaultTitle: title
defaultDescription: description
siteLanguage
ogLanguage
twitter
}
}
file(relativePath: { eq: "logo.png" }) {
childImageSharp {
resize {
src
}
}
}
}`

View File

@ -0,0 +1,29 @@
import PropTypes from 'prop-types'
import React from 'react'
import { Helmet } from 'react-helmet'
const Twitter = ({ type, username, title, desc, image }) => (
<Helmet>
{username && <meta name="twitter:creator" content={username} />}
<meta name="twitter:card" content={type} />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={desc} />
<meta name="twitter:image" content={image} />
<meta name="twitter:image:alt" content={desc} />
</Helmet>
)
export default Twitter
Twitter.propTypes = {
type: PropTypes.string,
username: PropTypes.string,
title: PropTypes.string.isRequired,
desc: PropTypes.string.isRequired,
image: PropTypes.string.isRequired,
}
Twitter.defaultProps = {
type: 'summary_large_image',
username: null,
}

View File

@ -0,0 +1,7 @@
import SEO from "./SEO"
import Facebook from "./Facebook"
import Twitter from "./Twitter"
export { Facebook, Twitter }
export default SEO

43
src/css/reset.scss Normal file
View File

@ -0,0 +1,43 @@
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote {
&:before, &:after {
content: "";
content: none;
}
}
q {
&:before, &:after {
content: "";
content: none;
}
}
table {
border-collapse: collapse;
border-spacing: 0;
}

892
src/css/style.scss Normal file
View File

@ -0,0 +1,892 @@
/* Colors primary*/
$primary-green: #10E260;
$primary-blue: #2A82DE;
$dark: #151515;
$white: #ffffff;
$background-grey: #F9F9F9;
/* Base preferences*/
html {
height: 100%;
}
html *,
html :before,
html :after {
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
body {
background-color: $background-grey;
background-image: url('../images/background-lume-installer.png');
background-repeat: no-repeat;
background-size: cover;
background-position: bottom;
font-family: "Roboto", 'Arial', serif;
}
em {
font-style: italic;
}
strong {
font-weight: 600;
}
h1 {
font-size: 65px;
font-weight: 600;
line-height: 1.1;
color: $dark;
text-align: center;
}
@media only screen and (max-width: 680px) {
h1 {
font-size: 48px;
line-height: 1.1;
}
}
@media only screen and (max-width: 480px) {
h1 {
font-size: 32px;
line-height: 1.1;
}
}
h2 {
font-size: 26px;
font-weight: 600;
line-height: 1.025;
color: $dark;
text-align: center;
}
@media only screen and (max-width: 480px) {
h2 {
font-size: 22px;
line-height: 1.2;
}
}
h3 {
font-size: 32px;
font-weight: 600;
line-height: 1.025;
color: $dark;
margin: 0 0 24px 0;
}
p {
font-size: 18px;
line-height: 1.7;
font-weight: 300;
color: $dark;
}
p + p {
margin-top: 30px;
}
/* Content container*/
.content-container {
max-width: 1280px;
padding: 10px 50px 12px 50px;
margin: 0 auto;
position: center;
}
@media only screen and (max-width: 860px) {
.content-container {
padding: 20px 30px 12px 30px;
}
}
@media only screen and (max-width: 480px) {
.content-container {
padding: 10px 20px 12px 20px;
}
}
/* Header */
.header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
margin-bottom: 8px;
}
.logo {
width: 150px;
margin: 0 0 0 2px;
}
@media only screen and (max-width: 480px) {
.header {
margin-bottom: 0px;
}
.logo {
width: 100px;
margin: 0 0 0 2px;
}
}
.donate-btn {
margin-top: 8px;
background-color: #ff005e;
padding: 12px 28px 14px 28px;
display: inline-block;
border: 0;
border-radius: 50px;
cursor: pointer;
color: #fff;
text-decoration: none;
font-size: 16px;
font-weight: 600;
}
.donate-btn:hover {
background-color: $primary-green;
color: $dark;
}
@media only screen and (max-width: 480px) {
.donate-btn {
margin-top: 0px;
padding: 10px 20px 12px 20px;
font-size: 14px;
}
}
/* Heading and portal */
.section-introduction {
display: -ms-grid;
display: grid;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
margin: 150px 0 0 0;
}
.download-card {
background-color: rgba(255, 255, 255, 0.4);
border: 0.5px solid rgba(16, 226, 96, 0.3);
border-radius: 8px;
-webkit-box-shadow: 0px 0px 50px 15px rgba(16, 226, 96, 0.10);
box-shadow: 0px 0px 50px 15px rgba(16, 226, 96, 0.10);
padding: 24px;
margin: 56px 0 0 0;
}
.heading-introduction {
z-index: 2;
margin: 0 0 0 0;
}
@media only screen and (max-width: 400px) {
.section-introduction {
margin: 90px 0 0 0;
}
}
.section-portal {
margin-top: -300px;
}
@media only screen and (max-width: 940px) {
.section-portal {
margin-top: -350px;
}
}
@media only screen and (max-width: 350px) {
.section-introduction {
z-index: 2;
margin: 70px 0 0 0;
}
}
@media only screen and (max-width: 680px) {
.section-portal {
margin-top: -320px;
}
}
@media only screen and (max-width: 480px) {
.section-portal {
margin-top: -240px;
}
}
@media only screen and (max-width: 400px) {
.section-portal {
margin-top: -215px;
}
}
@media only screen and (max-width: 350px) {
.section-portal {
margin-top: -200px;
}
}
@-webkit-keyframes portal-spin {
0% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes portal-spin {
0% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
.portal-frame {
--portal-color: #2A82DE;
max-width: 500px;
aspect-ratio: 1;
--portal-browserbugfix: perspective(2077px) translateZ(-0.1px);
-webkit-transform: var(--portal-browserbugfix,) scaleX(1);
-ms-transform: var(--portal-browserbugfix,) scaleX(1);
transform: var(--portal-browserbugfix,) scaleX(1);
-webkit-filter: contrast(1.75);
filter: contrast(1.75);
overflow: hidden;
margin: 0 auto;
}
.portal, .portal::before {
position: absolute;
inset: 0;
-webkit-animation: portal-spin 7s infinite linear;
animation: portal-spin 7s infinite linear;
}
.portal {
--portal-img: url('../images/portal.png');
--portal-mask: var(--portal-img) top left / 100% 100% no-repeat;
-webkit-mask: var(--portal-mask);
mask: var(--portal-mask);
}
.portal::before {
content: "";
animation-direction: reverse;
background: -webkit-gradient(
linear, left top, left bottom, color-stop(25%, #10E260), color-stop(125%, transparent), color-stop(25%, #2A82DE)
), var(--portal-color);
background: -o-linear-gradient(
#10E260 25%, transparent 125%, #2A82DE 25%
), var(--portal-color);
background: linear-gradient(
#10E260 25%, transparent 125%, #2A82DE 25%
), var(--portal-color);
}
.background-1 {
background-color: #fff;
border: 0.5px solid rgba(16, 226, 96, 0.3);
-webkit-box-shadow: 0px 0px 50px 15px rgba(16, 226, 96, 0.10);
box-shadow: 0px 0px 50px 15px rgba(16, 226, 96, 0.10);
border-radius: 8px;
}
/* Download component*/
.section-download {
margin-top: 24px;
}
.download-title span {
display: block;
font-size: 16px;
font-weight: 300;
color: $dark;
text-align: center;
margin: 16px 0 0 0;
}
.platform span {
display: block;
margin: 8px 0 16px 0;
font-size: 14px;
font-weight: 400;
color: $dark;
}
.download-button {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
margin: 24px 0 16px 0;
& a {
margin-right: 1em;
}
}
.btn img {
display: inline-block;
vertical-align: middle;
margin: -3px 6px 0 0;
width: 16px;
}
.btn {
display: inline-block;
border: 0;
border-radius: 6px;
background: -o-linear-gradient(left, #10E260 0%, #2A82DE 80%);
background: -webkit-gradient(linear, left top, right top, from(#10E260), color-stop(80%, #2A82DE));
background: linear-gradient(to right, #10E260 0%, #2A82DE 80%);
padding: 10px 30px 12px 30px;
font-family: "Roboto", 'Arial', sans-serif;
font-weight: 500;
font-size: 18px;
line-height: 1.6;
color: #FFFFFF;
text-align: center;
cursor: pointer;
}
.btn:hover {
background: #10E260;
color: #151515;
}
.os-options span {
display: block;
margin: 16px 0 0 0;
font-size: 12px;
font-weight: 300;
color: #000000;
text-align: center;
}
@media only screen and (max-width: 480px) {
.section-download {
margin-top: 10px;
}
.download-title {
margin: -6px 0 16px 0;
font-size: 14px;
}
.download-button {
margin: 20px 0 12px 0;
}
.btn {
font-size: 16px;
padding: 8px 20px 10px 20px;
}
.os-options span {
margin: 2px 0 0 0;
}
}
/* Advantages*/
.section-advantages {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-ms-flex-pack: distribute;
justify-content: space-around;
gap: 80px;
margin: 80px 60px 0 60px;
}
@media only screen and (max-width: 960px) {
.section-advantages {
gap: 40px;
margin: 60px 0px 0 0px;
}
}
@media only screen and (max-width: 680px) {
.section-advantages {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: end;
-ms-flex-pack: end;
justify-content: flex-end;
gap: 30px;
margin: 60px 0px 0 0px;
}
}
@media only screen and (max-width: 400px) {
.section-advantages {
margin: 45px 0px 0 0px;
}
}
.advantage-card {
width: 100%;
margin: 0 auto;
}
@media only screen and (max-width: 680px) {
.advantage-card {
width: 70%;
}
}
@media only screen and (max-width: 480px) {
.advantage-card {
width: 100%;
}
}
.advantage-card span {
display: block;
font-size: 20px;
font-weight: 600;
color: $primary-blue;
margin: 10px 0 14px 0;
text-align: center;
}
.advantage-card p {
font-size: 14px;
font-weight: 400;
line-height: 1.4;
font-weight: 400;
color: $dark;
text-align: center;
}
.advantage-card img {
display: block;
height: 24px;
margin: 0 auto;
}
/* Text image component */
.text-image {
margin: 80px 0 0 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
gap: 5%;
}
.content-body {
max-width: 50%;
}
.content-body p {
font-size: 18px;
}
.content-img {
max-width: 40%;
}
.content-img img {
max-width: 100%;
margin: 0 0 0 0;
}
@media only screen and (max-width: 768px) {
.text-image {
margin: 80px 0 0 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start;
gap: 20%;
}
.content-body {
max-width: 80%;
}
.content-img {
max-width: 80%;
margin: 0 0 24px 0;
}
.column-reverse {
-webkit-box-orient: vertical;
-webkit-box-direction: reverse;
-ms-flex-direction: column-reverse;
flex-direction: column-reverse;
}
}
@media only screen and (max-width: 480px) {
.text-image {
margin: 50px 0 0 0;
gap: 20%;
}
.content-body {
max-width: 100%;
}
.content-body p {
font-size: 16px;
}
.content-img {
max-width: 100%;
}
}
/* Text component */
.text {
margin: 80px 0 0 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
}
.text-body {
max-width: 95%;
}
.text-body p {
font-size: 18px;
}
@media only screen and (max-width: 768px) {
.text {
margin: 80px 0 0 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start;
gap: 20%;
}
.text-body {
max-width: 80%;
}
}
@media only screen and (max-width: 480px) {
.text {
margin: 50px 0 0 0;
}
.text-body {
max-width: 100%;
}
.text-body p {
font-size: 16px;
}
}
/* Donations */
.section-donate {
margin-top: 56px;
}
.section-donate h1 {
font-size: 40px;
font-weight: 600;
line-height: 1.1;
color: $dark;
text-align: center;
}
.section-donate .btn {
margin: 32px 0 0 0;
}
@media only screen and (max-width: 680px) {
.section-donate h1 {
font-size: 36px;
line-height: 1.2;
}
}
@media only screen and (max-width: 480px) {
.section-donate h1 {
font-size: 30px;
line-height: 1.2;
}
.section-donate {
margin-top: 40px;
}
.donate-heading {
margin: 0 0 32px 0;
}
.section-donate .btn {
margin: 8px 0 0 0;
}
}
/* Modal box*/
.modal-box {
position: fixed;
background-color: rgba(42, 130, 222, 0.95);
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 999;
visibility: hidden;
opacity: 0;
pointer-events: none;
transition: all 0.3s;
&:target {
visibility: visible;
opacity: 1;
pointer-events: auto;
}
& > div {
width: 500px;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
padding: 20px 40px 20px 40px;
background: white;
border-radius: 16px;
}
}
.modal-box h4 {
font-size: 26px;
font-weight: 600;
line-height: 1.025;
color: $dark;
text-align: left;
margin: 20px 0 20px 0;
}
.modal-box .btn {
margin: 16px 0 0 0;
}
.modal-box ol {
display: block;
font-size: 16px;
line-height: 1.6;
font-weight: 300;
color: $dark;
margin-top: 8px;
}
.modal-close {
color: $dark;
font-size: 14px;
position: absolute;
right: 40px;
text-align: right;
top: 20px;
width: 70px;
text-decoration: underline;
&:hover {
color: $primary-blue;
}
}
@media only screen and (max-width: 680px) {
.modal-box {
&:target {
}
& > div {
width: 90%;
}
}
}
@media only screen and (max-width: 480px) {
.modal-box h4 {
font-size: 22px;
line-height: 1.2;
}
.modal-box {
&:target {
}
& > div {
padding: 20px 24px 20px 24px;
border-radius: 16px;
}
}
.modal-box ol {
font-size: 14px;
margin: 20px 0 16px 0;
}
}
/* Footer */
.section-footer {
margin: 80px 0 0 0;
}
.footer-divider {
text-align: center;
}
.footer-divider .gatsby-image-wrapper img {
width: 50px;
margin: 0 auto;
}
footer {
margin: 16px 0 0 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
vertical-align: middle;
gap: 30px;
}
.company p {
font-size: 14px;
}
.github a {
font-size: 14px;
color: $primary-blue;
text-decoration: underline;
vertical-align: middle;
cursor: pointer;
}
.github .gatsby-image-wrapper img {
width: 18px;
vertical-align: middle;
margin: 2px 2px 0 0;
}
@media only screen and (max-width: 580px) {
.section-footer {
margin-top: 60px;
}
.footer-divider {
text-align: center;
}
footer {
margin: 16px 0 0 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
text-align: center;
gap: 6px;
}
}
blockquote {
background: #f9f9f9;
border-left: 10px solid #ccc;
margin: 1.5em 10px;
padding: 0.5em 10px;
quotes: "\201C""\201D""\2018""\2019";
}
blockquote:before {
color: #ccc;
content: open-quote;
font-size: 4em;
line-height: 0.1em;
margin-right: 0.25em;
vertical-align: -0.4em;
}
blockquote p {
display: inline;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
src/images/firefox.svg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path fill="#2A82DE" d="M20,16c-0.8,0-1.6,0.3-2.1,0.9l-2.2-1.3c0.2-0.5,0.3-1,0.3-1.6c0-2-1.5-3.7-3.5-3.9V7.9C13.9,7.7,15,6.5,15,5c0-1.7-1.3-3-3-3S9,3.3,9,5c0,1.5,1.1,2.7,2.5,2.9v2.1C9.5,10.3,8,12,8,14c0,0.6,0.1,1.1,0.3,1.6l-2.2,1.3C5.6,16.3,4.8,16,4,16c-1.7,0-3,1.3-3,3s1.3,3,3,3c1.7,0,3-1.3,3-3c0-0.5-0.1-0.9-0.3-1.3l2.2-1.3C9.6,17.4,10.7,18,12,18c1.3,0,2.4-0.6,3.1-1.6l2.2,1.3C17.1,18.1,17,18.5,17,19c0,1.7,1.3,3,3,3c1.7,0,3-1.3,3-3C23,17.3,21.7,16,20,16z M4,21c-1.1,0-2-0.9-2-2s0.9-2,2-2c1.1,0,2,0.9,2,2C6,20.1,5.1,21,4,21z M10,5c0-1.1,0.9-2,2-2c1.1,0,2,0.9,2,2c0,1.1-0.9,2-2,2S10,6.1,10,5z M12,17c-1.7,0-3-1.3-3-3s1.3-3,3-3c1.7,0,3,1.3,3,3C15,15.7,13.7,17,12,17z M20,21c-1.1,0-2-0.9-2-2s0.9-2,2-2c1.1,0,2,0.9,2,2C22,20.1,21.1,21,20,21z"/></svg>

After

Width:  |  Height:  |  Size: 842 B

1
src/images/icon-code.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path fill="#2A82DE" d="M6,9V5.5C6,4.1,7.1,3,8.5,3C8.8,3,9,2.8,9,2.5S8.8,2,8.5,2C6.6,2,5,3.6,5,5.5V9c0,1.4-1.1,2.5-2.5,2.5C2.2,11.5,2,11.7,2,12s0.2,0.5,0.5,0.5C3.9,12.5,5,13.6,5,15v3.5C5,20.4,6.6,22,8.5,22C8.8,22,9,21.8,9,21.5S8.8,21,8.5,21C7.1,21,6,19.9,6,18.5V15c0-1.3-0.7-2.4-1.7-3C5.3,11.4,6,10.3,6,9z M21.5,11.5c-1.4,0-2.5-1.1-2.5-2.5V5.5C19,3.6,17.4,2,15.5,2C15.2,2,15,2.2,15,2.5S15.2,3,15.5,3C16.9,3,18,4.1,18,5.5V9c0,1.3,0.7,2.4,1.7,3c-1,0.6-1.7,1.7-1.7,3v3.5c0,1.4-1.1,2.5-2.5,2.5c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5c1.9,0,3.5-1.6,3.5-3.5V15c0-1.4,1.1-2.5,2.5-2.5c0.3,0,0.5-0.2,0.5-0.5S21.8,11.5,21.5,11.5z"/></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path fill="#2A82DE" d="M21,8v1.5c0,0.276123,0.223877,0.5,0.5,0.5S22,9.776123,22,9.5V8c-0.0018311-1.6561279-1.3438721-2.9981689-3-3h-6.1396484l-0.3163452-0.9492188C12.1364746,2.8253784,10.989624,1.9989014,9.6982422,2H5C3.3438721,2.0018311,2.0018311,3.3438721,2,5v13c0.0018311,1.6561279,1.3438721,2.9981689,3,3h6.5c0.276123,0,0.5-0.223877,0.5-0.5S11.776123,20,11.5,20H5c-1.1040039-0.0014038-1.9985962-0.8959961-2-2V5c0.0014038-1.1040039,0.8959961-1.9985962,2-2h4.6982422c0.8607788-0.0007324,1.6251831,0.550293,1.8964844,1.3671875l0.4306641,1.2910156C12.09375,5.8622437,12.28479,5.9998169,12.5,6H19C20.1040039,6.0014038,20.9985962,6.8959961,21,8z M22,16.0508423V14.5c0-1.3807373-1.1192627-2.5-2.5-2.5S17,13.1192627,17,14.5v1.5508423C15.8594971,16.2832642,15.0010986,17.2910767,15,18.5v2c0.0012817,1.380188,1.119812,2.4987183,2.5,2.5h4c1.380188-0.0012817,2.4987183-1.119812,2.5-2.5v-2C23.9989014,17.2910767,23.1405029,16.2832642,22,16.0508423z M18,14.5c0-0.8284302,0.6715698-1.5,1.5-1.5s1.5,0.6715698,1.5,1.5V16h-3V14.5z M23,20.5c-0.0009155,0.828064-0.671936,1.4990845-1.5,1.5h-4c-0.828064-0.0009155-1.4990845-0.671936-1.5-1.5v-2c0.0009155-0.828064,0.671936-1.4990845,1.5-1.5h4c0.828064,0.0009155,1.4990845,0.671936,1.5,1.5V20.5z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/images/icon-github.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

1
src/images/icon-grid.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path fill="#2A82DE" d="M21.5,13h-8.0005493C13.2234497,13.0001831,12.9998169,13.223999,13,13.5v8.0005493C13.0001831,21.7765503,13.223999,22.0001831,13.5,22h8.0006104C21.7765503,21.9998169,22.0001831,21.776001,22,21.5v-8.0006104C21.9998169,13.2234497,21.776001,12.9998169,21.5,13z M21,21h-7v-7h7V21z M10.5,2H2.4993896C2.2234497,2.0001831,1.9998169,2.223999,2,2.5v8.0005493C2.0001831,10.7765503,2.223999,11.0001831,2.5,11h8.0006104C10.7765503,10.9998169,11.0001831,10.776001,11,10.5V2.4993896C10.9998169,2.2234497,10.776001,1.9998169,10.5,2z M10,10H3V3h7V10z M10.5,13H2.4993896C2.2234497,13.0001831,1.9998169,13.223999,2,13.5v8.0005493C2.0001831,21.7765503,2.223999,22.0001831,2.5,22h8.0006104C10.7765503,21.9998169,11.0001831,21.776001,11,21.5v-8.0006104C10.9998169,13.2234497,10.776001,12.9998169,10.5,13z M10,21H3v-7h7V21z M21.5,2h-8.0005493C13.2234497,2.0001831,12.9998169,2.223999,13,2.5v8.0005493C13.0001831,10.7765503,13.223999,11.0001831,13.5,11h8.0006104C21.7765503,10.9998169,22.0001831,10.776001,22,10.5V2.4993896C21.9998169,2.2234497,21.776001,1.9998169,21.5,2z M21,10h-7V3h7V10z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

1
src/images/icon-lock.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path fill="#2A82DE" d="M17,9V7c0-2.7614136-2.2385864-5-5-5S7,4.2385864,7,7v2c-1.6561279,0.0018311-2.9981689,1.3438721-3,3v7c0.0018311,1.6561279,1.3438721,2.9981689,3,3h10c1.6561279-0.0018311,2.9981689-1.3438721,3-3v-7C19.9981689,10.3438721,18.6561279,9.0018311,17,9z M8,7c0-2.2091675,1.7908325-4,4-4s4,1.7908325,4,4v2H8V7z M19,19c-0.0014038,1.1040039-0.8959961,1.9985962-2,2H7c-1.1040039-0.0014038-1.9985962-0.8959961-2-2v-7c0.0014038-1.1040039,0.8959961-1.9985962,2-2h10c1.1040039,0.0014038,1.9985962,0.8959961,2,2V19z M12,13c-0.276123,0-0.5,0.223877-0.5,0.5v4.0005493C11.5001831,17.7765503,11.723999,18.0001831,12,18h0.0006104c0.2759399-0.0001831,0.4995728-0.223999,0.4993896-0.5v-4C12.5,13.223877,12.276123,13,12,13z"/></svg>

After

Width:  |  Height:  |  Size: 823 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path fill="#2A82DE" d="M19.9894409,3.753418c-0.0565796-0.2703857-0.3215942-0.4437256-0.59198-0.387207c-2.4692383,0.5215454-5.0441284-0.0050659-7.1103516-1.4541016c-0.1722412-0.1210938-0.4019775-0.1210938-0.5742188,0C9.6466064,3.361084,7.0717773,3.8876343,4.6025391,3.3662109C4.5689697,3.3591919,4.53479,3.3556519,4.5004883,3.3556519C4.2242432,3.3554688,4.0001831,3.5792236,4,3.8554688v8.0185547c0.0016479,2.9362183,1.4152222,5.6925659,3.7988281,7.4072266l3.9101562,2.8037109C11.7937622,22.1459961,11.8955688,22.178833,12,22.1787109c0.1044312,0.0001221,0.2062378-0.0326538,0.2910156-0.093689l3.9101562-2.803772C18.5847778,17.5665894,19.9983521,14.8102417,20,11.8740234V3.8554688C20,3.821167,19.99646,3.7869873,19.9894409,3.753418z M19,11.8740234c-0.0010986,2.6139526-1.2591553,5.0679321-3.3808594,6.5947266L12,21.0634766L8.3808594,18.46875C6.2591553,16.9418945,5.0010986,14.4879761,5,11.8740234V4.453125c2.4417725,0.3648682,4.9324951-0.1789551,7-1.5283203c2.067627,1.348999,4.5582275,1.8928223,7,1.5283203V11.8740234z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/images/icon-windows.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/images/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

BIN
src/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
src/images/matrix.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/images/moon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

1
src/images/msedge.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><defs><radialGradient id="b" cx="161.8" cy="68.9" r="95.4" gradientTransform="matrix(1 0 0 -.95 0 248.8)" gradientUnits="userSpaceOnUse"><stop offset=".7" stop-opacity="0"/><stop offset=".9" stop-opacity=".5"/><stop offset="1"/></radialGradient><radialGradient id="d" cx="-340.3" cy="63" r="143.2" gradientTransform="matrix(.15 -.99 -.8 -.12 176.6 -125.4)" gradientUnits="userSpaceOnUse"><stop offset=".8" stop-opacity="0"/><stop offset=".9" stop-opacity=".5"/><stop offset="1"/></radialGradient><radialGradient id="e" cx="113.4" cy="570.2" r="202.4" gradientTransform="matrix(-.04 1 2.13 .08 -1179.5 -106.7)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#35c1f1"/><stop offset=".1" stop-color="#34c1ed"/><stop offset=".2" stop-color="#2fc2df"/><stop offset=".3" stop-color="#2bc3d2"/><stop offset=".7" stop-color="#36c752"/></radialGradient><radialGradient id="f" cx="376.5" cy="568" r="97.3" gradientTransform="matrix(.28 .96 .78 -.23 -303.8 -148.5)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#66eb6e"/><stop offset="1" stop-color="#66eb6e" stop-opacity="0"/></radialGradient><linearGradient id="a" x1="63.3" y1="84" x2="241.7" y2="84" gradientTransform="matrix(1 0 0 -1 0 266)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0c59a4"/><stop offset="1" stop-color="#114a8b"/></linearGradient><linearGradient id="c" x1="157.3" y1="161.4" x2="46" y2="40.1" gradientTransform="matrix(1 0 0 -1 0 266)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1b9de2"/><stop offset=".2" stop-color="#1595df"/><stop offset=".7" stop-color="#0680d7"/><stop offset="1" stop-color="#0078d4"/></linearGradient></defs><path d="M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z" transform="translate(-4.6 -5)" style="fill:url(#a)"/><path d="M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z" transform="translate(-4.6 -5)" style="isolation:isolate;opacity:.35;fill:url(#b)"/><path d="M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z" transform="translate(-4.6 -5)" style="fill:url(#c)"/><path d="M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z" transform="translate(-4.6 -5)" style="opacity:.41;fill:url(#d);isolation:isolate"/><path d="M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z" transform="translate(-4.6 -5)" style="fill:url(#e)"/><path d="M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z" transform="translate(-4.6 -5)" style="fill:url(#f)"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
src/images/portal-image.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
src/images/portal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

54
src/pages/404.tsx Normal file
View File

@ -0,0 +1,54 @@
import * as React from "react"
import { Link } from "gatsby"
// styles
const pageStyles = {
color: "#232129",
padding: "96px",
fontFamily: "-apple-system, Roboto, sans-serif, serif",
}
const headingStyles = {
marginTop: 0,
marginBottom: 64,
maxWidth: 320,
}
const paragraphStyles = {
marginBottom: 48,
}
const codeStyles = {
color: "#8A6534",
padding: 4,
backgroundColor: "#FFF4DB",
fontSize: "1.25rem",
borderRadius: 4,
}
// markup
const NotFoundPage = () => {
return (
<main style={pageStyles}>
<title>Not found</title>
<h1 style={headingStyles}>Page not found</h1>
<p style={paragraphStyles}>
Sorry{" "}
<span role="img" aria-label="Pensive emoji">
😔
</span>{" "}
we couldnt find what you were looking for.
<br />
{process.env.NODE_ENV === "development" ? (
<>
<br />
Try creating a page in <code style={codeStyles}>src/pages/</code>.
<br />
</>
) : null}
<br />
<Link to="/">Go home</Link>.
</p>
</main>
)
}
export default NotFoundPage

72
src/pages/donate.tsx Normal file
View File

@ -0,0 +1,72 @@
import * as React from "react"
import Layout from "../components/Layout";
import {StaticImage} from "gatsby-plugin-image";
const DonatePage = () => {
return <Layout>
<section className="section-donate">
<h1>Support Lume Web, help us an open, decentralized web for humanity</h1>
<div className="download">
<div className="download-button">
<a href="https://lumeweb.com/donate" target="_blank">
<button className="btn">Make a donation</button>
</a>
</div>
</div>
</section>
<section className="section-advantages">
<div className="advantage-card">
<StaticImage src={"../images/icon-code.svg"} alt="Icon code"/>
<span>Development spending</span>
<p>All donations are spent on active development of Lume Web and maintaining community services.</p>
</div>
<div className="advantage-card">
<StaticImage src={"../images/icon-shield.svg"} alt="Icon shield"/>
<span>Help pioneer Web3</span>
<p>The Web3 is taking back the internet to be the user-owned internet. If we, the users, don't fund and build what we want, it will be again, decided for us, and benefit others and become centralized to a few, not decentralized for the many.</p>
</div>
<div className="advantage-card">
<StaticImage src={"../images/icon-grid.svg"} alt="Icon grid"/>
<span>Help us grow</span>
<p>We need the communities voice and hands. Lume Web is your open gateway and platform, so it must be built by those who are going to use it the most.</p>
</div>
</section>
<section className="text-image">
<div className="content-img">
<StaticImage src={"../images/image-roadmap.jpg"} alt="Roadmap image"/>
</div>
<div className="content-body">
<h3>Why we ask for your donations</h3>
<p>At this time, Lume Web is a one-person show and frankly... a spec of dust on the internet, but with large ideas and a unique vision. We are relying on the community, and crypto whales to support this initiative to build the technology the internet needs to be owned by the users its serves.</p>
<p>The current internet is controlled by a few for them to make money with you as the product, in exchange for all the "free" stuff you get in return. If you think on it, you will find a pattern here, and it turns us to becoming batteries in the matrix.</p>
</div>
</section>
<section className="text">
<div className="text-body">
<h3>Payment possibilities</h3>
<p>We aren't picky 😉. If there is a way you want to pay us, we are happy to take it. The project is funded through Hammer Technologies LLC, in the USA, and so crypto, FOSS platforms, and traditional payment methods are all accepted! Just click donate at the top to see your options, and to contact us if needed.</p>
</div>
</section>
<section className="text-image column-reverse">
<div className="content-body">
<h3>The way we are different</h3>
<p>First understand the .com boom/bubble/bust in the 1990's to 2000's was a gold rush for VC's to get rich or die trying. Outside VC's... everyone seemed to be smoking something and was looking to get rich too!</p>
<p>We have entered that era again, but this time with crypto, web3 and the "metaverse". Crypto is the money-arm of the web, web3 is to be the next internet, and at this time the "metaverse" is PR-filled hype and per the wolf of wallstreet.. <blockquote>It's a whazy. It's a woozie. It's fairy dust.</blockquote> If you want the metaverse, look at MMORPG, VR or just... real life 😝</p>
<p>The Lume Web project has no VC equity and will never give out equity in any form to investment companies since their motive is to make a profit usually by being a walled guarden and centralizing. VC's interests broadly go against the interest of a user-owned internet.</p>
</div>
<div className="content-img">
<StaticImage src={"../images/image-development-race.png"} alt="Roadmap image"/>
</div>
</section>
</Layout>
};
export default DonatePage;

90
src/pages/index.tsx Normal file
View File

@ -0,0 +1,90 @@
import * as React from "react"
import Layout from "../components/Layout";
import {StaticImage} from "gatsby-plugin-image";
// markup
const IndexPage = () => {
return <Layout>
<div className="section-introduction">
<div className="heading-introduction">
<h1>Lume Web, your personal and private gateway to web3</h1>
</div>
<div className="section-portal">
<div className="portal-frame">
<div className="portal"/>
</div>
</div>
</div>
<section className="section-download">
<div>
<h2>Download Lume Web Extension</h2>
</div>
<div className="download">
<div className="download-button">
<a href="https://addons.mozilla.org/en-US/firefox/addon/lume-web/" target="_blank"><StaticImage
src={"../images/firefox.svg"} alt={"Firefox Extension Download"} width={50}/></a>
<a href="https://microsoftedge.microsoft.com/addons/detail/lume-web/iknceiggnffomcchipaclfnjfkbkppof"
target="_blank"><StaticImage
src={"../images/msedge.svg"} alt={"Microsoft Edge Extension Download"} width={50}/></a>
</div>
</div>
</section>
<section className="section-advantages">
<div className="advantage-card">
<StaticImage src={"../images/icon-lock.svg"} alt="Icon lock"/>
<span>It's private</span>
<p>There is no sign-up required to browse web3. You do not even need to provide an email for basic use.
Additionally, if you do create an account, all data is encrypted with your password</p>
</div>
<div className="advantage-card">
<StaticImage src={"../images/icon-folder-lock.svg"} alt="Icon folder lock"/>
<span>It's personal</span>
<p>Everything you do is owned by you. Your data is not controlled or owned by others. You are free to
share copies to let others own a version or keep encrypted in your account.</p>
</div>
<div className="advantage-card">
<StaticImage src={"../images/icon-channel.svg"} alt="Icon channel"/>
<span>It's your gateway</span>
<p>Gain freedom on a new web, owned by its users, and with privacy and control built-in.</p>
</div>
</section>
<section className="text-image">
<div className="content-img">
<StaticImage src={"../images/portal-image.jpg"} alt="Portal"/>
</div>
<div className="content-body">
<h3>Lume Web grants your access to web3</h3>
<p>Currently, there is a lot of marketing and hype around "Web3", because frankly most don't have a clue
on what Web3 is, just that there is money in it! It is the second .com boom. Similar can be said for
"The Metaverse", but many will love to pitch and sell otherwise. Most things claiming to "be" Web3
are
really just another platform trying to make money off you, but not really being on a secure,
decentralized web that is intended for your freedom.</p>
<p>Now many of the services have technology that are "building blocks" for the next internet, but the
owners have other ideas as well, which makes them into what they were marketed to not be. That is...
centralized "SaaS" services that want to sell you something, but only achieve becoming another
internet walled garden, with some "blockchain" technology mixed in.</p>
</div>
</section>
<section className="text-image">
<div className="content-body">
<h3>Free Yourself</h3>
<p>We have had decentralized internet for a while now (decades) in various forms, so consider Web3 an upgrade that
combines many of these attempts + blockchain, into an evolution for the user-owned internet, rather than us, the
user, becoming batteries in
the matrix.</p>
</div>
<div className="content-img">
<StaticImage src={"../images/matrix.jpg"} alt="Matrix Pods"/>
</div>
</section>
</Layout>
}
export default IndexPage

102
tsconfig.json Normal file
View File

@ -0,0 +1,102 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Projects */
// "incremental": true, /* Enable incremental compilation */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "esnext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"lib": ["dom", "esnext"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
"jsx": "react", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
/* Modules */
"module": "esnext", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "resolveJsonModule": true, /* Enable importing .json files */
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"include": ["./src/**/*", "./gatsby-node.ts", "./gatsby-config.ts", "./plugins/**/*"]
}

11484
yarn.lock Normal file

File diff suppressed because it is too large Load Diff