Skip to content

Commit

Permalink
Restore marketing site (#27)
Browse files Browse the repository at this point in the history
* Restore marketing site

* fix eslint issues
  • Loading branch information
grod220 authored Jun 13, 2024
1 parent 9fa3fae commit d25a04b
Show file tree
Hide file tree
Showing 31 changed files with 7,190 additions and 13,304 deletions.
40 changes: 40 additions & 0 deletions .github/workflows/deploy-firebase.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
# Builds the static site via pnpm, then copies that local directory's contents
# to Firebase, at: https://praxwallet.com
name: Deploy Prax marketing site
on:
# Support ad-hoc runs via dispatch, so we can deploy from
# unmerged feature branches if necessary.
workflow_dispatch:
push:
branches:
- main

jobs:
build:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout the source code
uses: actions/checkout@v4

- uses: pnpm/action-setup@v3
with:
version: 8

- name: Install dependencies
run: pnpm install

- name: Build static site
run: pnpm build
working-directory: apps/prax-marketing-site

- name: Deploy dapp static site to firebase
# N.B. the firebase-action helper doesn't support semver, e.g. `@v13`,
# so we hardcode a version.
uses: w9jds/[email protected]
with:
args: deploy
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
PROJECT_PATH: apps/prax-marketing-site/dist
13 changes: 13 additions & 0 deletions apps/prax-marketing-site/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { penumbraEslintConfig } from '@penumbra-zone/eslint-config';
import { config, parser } from 'typescript-eslint';

export default config({
...penumbraEslintConfig,
languageOptions: {
parser,
parserOptions: {
project: true,
tsconfigRootDir: import.meta.dirname,
},
},
});
10 changes: 10 additions & 0 deletions apps/prax-marketing-site/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!doctype html>
<html lang="en">
<head>
<link href="./favicon.png" rel="icon" sizes="80x80" type="image/png" />
</head>
<body>
<div id="root"></div>
<script src="./src/main.tsx" type="module"></script>
</body>
</html>
28 changes: 28 additions & 0 deletions apps/prax-marketing-site/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "prax-marketing-website",
"version": "4.2.0",
"private": true,
"type": "module",
"scripts": {
"build": "tsc && vite build",
"clean": "rm -rfv dist",
"dev": "vite --port 5173",
"lint": "eslint ."
},
"dependencies": {
"@vitejs/plugin-react-swc": "^3.6.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.23.1",
"tailwindcss": "^3.4.3"
},
"devDependencies": {
"@penumbra-zone/eslint-config": "workspace:*",
"@penumbra-zone/tailwind-config": "workspace:*",
"@types/react": "^18.3.2",
"@types/react-dom": "^18.3.0",
"autoprefixer": "^10.4.19",
"firebase-tools": "^13.8.0",
"postcss": "^8.4.38"
}
}
6 changes: 6 additions & 0 deletions apps/prax-marketing-site/postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
Binary file added apps/prax-marketing-site/public/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions apps/prax-marketing-site/public/prax-white-vertical.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
36 changes: 36 additions & 0 deletions apps/prax-marketing-site/src/components/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { Link } from 'react-router-dom';

export const Index = () => {
return (
<div className='flex min-h-screen w-full flex-col items-center justify-center gap-4 bg-neutral-800'>
<img src='./prax-white-vertical.svg' className='size-72' />
<div className='group relative -ml-4 mb-2 inline-flex'>
<div className='text-3xl font-bold text-white'>
<div>Personal.</div>
<div>Private.</div>
<div>Practical.</div>
</div>
</div>
<div className='group relative my-8 -ml-4 inline-flex'>
<div className='absolute -inset-px rounded-xl bg-gradient-to-r from-[#ff8f2f] via-[#c9b67c] to-[#8be4d9] opacity-70 blur-lg transition-all duration-1000 group-hover:-inset-1 group-hover:opacity-100 group-hover:duration-200'></div>
<a
href='https://chromewebstore.google.com/detail/penumbra-wallet/lkpmkhpnhknhmibgnmmhdhgdilepfghe'
title='Install the Prax Wallet'
className='relative inline-flex items-center justify-center rounded-xl bg-gray-900 px-7 py-3 text-lg font-bold text-white transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-gray-900 focus:ring-offset-2'
role='button'
>
Add to Chrome
</a>
</div>
<div className='group relative -ml-4 inline-flex' style={{ maxWidth: '250px' }}>
<div className='text-lg text-white'>
Prax Wallet is a local-first browser wallet for Penumbra that puts you in control of your
data.
</div>
</div>
<Link to='/privacy-policy' className='-ml-4 italic text-neutral-600 underline'>
Privacy Policy
</Link>
</div>
);
};
75 changes: 75 additions & 0 deletions apps/prax-marketing-site/src/components/privacy-policy.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
export const PrivacyPolicy = () => {
return (
<div className='flex min-h-screen w-full flex-col gap-4 bg-neutral-800 p-10 text-white'>
<p className='text-3xl'>Privacy Policy</p>
<p className='italic'>Last updated: May 6, 2024</p>

<p>
Welcome to Prax Wallet, created by Penumbra Labs Inc. (“<b>Penumbra Labs</b>,” &quot;
<b>we</b>,&quot; &quot;<b>our</b>,&quot; or &quot;<b>us</b>&quot;). We are committed to
protecting your privacy. This Privacy Policy describes our limited data processing
activities related to your use of the Prax Wallet application (the “<b>Software</b>”).
</p>

<p>
The Prax Wallet is open-source software, and your use of the Prax Wallet is subject to the
terms of the MIT license available{' '}
<a href='https://github.com/prax-wallet/web/blob/main/LICENSE-MIT' className='underline'>
here
</a>
.
</p>

<p className='text-xl font-bold'>We Do Not Collect Personal Information</p>
<p>
Prax Wallet is designed with privacy as a core principle. The Software runs entirely on the
end-user device, and we do not collect any personal information from users of our Software.
In particular, we do <u>not</u> collect the following categories of personal information
from you:
</p>
<ul className='ml-10 list-disc'>
<li>
<b>Identifiers</b>. We do not collect name, email address, contact information, financial
information, transaction history, or device information.
</li>
<li>
<b>Cookies</b>. We do not collect log data, use cookies, or similar tracking technologies
to track user activity on our Software.
</li>
<li>
<b>Private Keys</b>. We will never ask you to share your private keys or wallet seed.
Never trust anyone or any site that asks you to enter your private keys or wallet seed.
</li>
</ul>
<p className='text-xl font-bold'>We Do Not Use or Share Your Personal Information</p>
<p>
Because we do not collect any personal information from you through the Software, we also do
not use such information or share such information to any third parties.
</p>
<p className='text-xl font-bold'>Third-party RPC Endpoints and Frontends</p>
<p>
Prax Wallet connects to a user-specified Remote Procedure Call (“<b>RPC</b>”) endpoint.
While the Penumbra protocol is designed to minimize information transmitted in RPC requests,
Penumbra Labs cannot make any guarantees about the privacy practices of third-party RPC
services. Similarly, Prax Wallet allows third-party web frontends to request connections to
the wallet and interact with user data. While Prax Wallet is designed to put users in
control of their data, Penumbra Labs cannot make any guarantees about the privacy practices
of third-party frontends.
</p>
<p className='text-xl font-bold'>Changes to This Privacy Policy</p>
<p>
We reserve the right to update or change our Privacy Policy at any time. We will notify you
of any changes by posting the new Privacy Policy on this page. You are advised to review
this Privacy Policy periodically for any changes.
</p>
<p className='text-xl font-bold'>Contact Us</p>
<p>
If you have any questions about this Privacy Policy, please contact us at{' '}
<a href='mailto:[email protected]' className='underline'>
[email protected]
</a>
.
</p>
</div>
);
};
14 changes: 14 additions & 0 deletions apps/prax-marketing-site/src/components/root-router.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { createHashRouter } from 'react-router-dom';
import { Index } from '.';
import { PrivacyPolicy } from './privacy-policy';

export const rootRouter = createHashRouter([
{
path: '/',
element: <Index />,
},
{
path: 'privacy-policy',
element: <PrivacyPolicy />,
},
]);
3 changes: 3 additions & 0 deletions apps/prax-marketing-site/src/globals.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
12 changes: 12 additions & 0 deletions apps/prax-marketing-site/src/main.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { createRoot } from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import { rootRouter } from './components/root-router';

import './globals.css';

const Main = () => {
return <RouterProvider router={rootRouter} />;
};

const rootElement = document.getElementById('root') as HTMLDivElement;
createRoot(rootElement).render(<Main />);
1 change: 1 addition & 0 deletions apps/prax-marketing-site/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from '@penumbra-zone/tailwind-config';
5 changes: 5 additions & 0 deletions apps/prax-marketing-site/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"extends": "tsconfig/vite.json",
"include": ["src", "*.ts", "__mocks__", "eslint.config.mjs"],
"exclude": ["node_modules"]
}
7 changes: 7 additions & 0 deletions apps/prax-marketing-site/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';

export default defineConfig({
base: './',
plugins: [react()],
});
1 change: 1 addition & 0 deletions packages/bech32m/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/bech32m",
"version": "5.0.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"description": "Tools for manipulating Penumbra bech32m strings",
"type": "module",
Expand Down
1 change: 1 addition & 0 deletions packages/client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/client",
"version": "6.0.1",
"private": true,
"license": "(MIT OR Apache-2.0)",
"description": "Package for connecting to any Penumbra extension, including Prax.",
"type": "module",
Expand Down
1 change: 1 addition & 0 deletions packages/crypto/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/crypto-web",
"version": "3.0.10",
"private": true,
"license": "(MIT OR Apache-2.0)",
"type": "module",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/eslint-config/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/eslint-config",
"version": "1.0.1",
"private": true,
"license": "(MIT OR Apache-2.0)",
"main": "eslint.config.mjs",
"exports": {
Expand Down
1 change: 1 addition & 0 deletions packages/getters/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/getters",
"version": "6.1.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"description": "Convenience getters for the deeply nested optionals of Penumbra's protobuf types",
"type": "module",
Expand Down
1 change: 1 addition & 0 deletions packages/keys/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/keys",
"version": "4.1.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"description": "Tool to download proving keys for Penumbra",
"type": "module",
Expand Down
1 change: 1 addition & 0 deletions packages/perspective/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/perspective",
"version": "4.0.1",
"private": true,
"license": "(MIT OR Apache-2.0)",
"description": "Tools for assuming different perspectives of Penumbra transactions",
"type": "module",
Expand Down
1 change: 1 addition & 0 deletions packages/protobuf/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/protobuf",
"version": "4.1.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"description": "Exports a `@bufbuild/protobuf` type registry with all message types necessary to communicate with a Penumbra extension",
"type": "module",
Expand Down
1 change: 1 addition & 0 deletions packages/services-context/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/services-context",
"version": "3.3.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"type": "module",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/services/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/services",
"version": "4.1.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"type": "module",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/storage/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@penumbra-zone/storage",
"version": "4.0.0",
"private": true,
"license": "(MIT OR Apache-2.0)",
"type": "module",
"scripts": {
Expand Down
Loading

0 comments on commit d25a04b

Please sign in to comment.