From 996e3610acfc2b3c006f7565a0981beefaa255ce Mon Sep 17 00:00:00 2001 From: Ben Ramey Date: Thu, 23 Sep 2021 09:26:56 -0500 Subject: [PATCH] Switch to site built with astro --- site/.gitignore | 18 + site/.npmrc | 2 + site/.stackblitzrc | 6 + site/README.md | 84 ++--- site/astro.config.mjs | 18 + site/package.json | 40 +-- site/public/android-chrome-192x192.png | Bin 13072 -> 0 bytes site/public/android-chrome-512x512.png | Bin 47064 -> 0 bytes site/public/apple-touch-icon.png | Bin 11722 -> 0 bytes site/public/assets/logo.svg | 12 + site/public/favicon-16x16.png | Bin 568 -> 0 bytes site/public/favicon-32x32.png | Bin 1296 -> 0 bytes site/public/favicon.ico | Bin 15406 -> 84 bytes site/public/index.html | 22 -- site/public/manifest.json | 25 -- site/public/robots.txt | 3 +- site/public/style/global.css | 28 ++ site/public/style/home.css | 53 +++ site/sandbox.config.json | 11 + site/serverless.yml | 2 +- site/src/App.js | 58 --- site/src/App.module.css | 333 ------------------ site/src/components/ReactCounter.jsx | 15 + site/src/components/Tour.astro | 85 +++++ site/src/fragments/Loading/Loading.js | 32 -- site/src/fragments/Loading/Loading.module.css | 47 --- site/src/fragments/Loading/index.js | 1 - site/src/index.css | 123 ------- site/src/index.js | 15 - site/src/pages/Auth/Auth.js | 249 ------------- site/src/pages/Auth/Auth.module.css | 231 ------------ site/src/pages/Dashboard/Dashboard.js | 82 ----- site/src/pages/Dashboard/Dashboard.module.css | 92 ----- site/src/pages/Home/Home.js | 64 ---- site/src/pages/Home/Home.module.css | 105 ------ site/src/pages/index.astro | 58 +++ site/src/utils/helpers.js | 76 ---- site/src/utils/index.js | 1 - site/tsconfig.json | 3 + 39 files changed, 349 insertions(+), 1645 deletions(-) create mode 100644 site/.gitignore create mode 100644 site/.npmrc create mode 100644 site/.stackblitzrc create mode 100644 site/astro.config.mjs delete mode 100644 site/public/android-chrome-192x192.png delete mode 100644 site/public/android-chrome-512x512.png delete mode 100644 site/public/apple-touch-icon.png create mode 100644 site/public/assets/logo.svg delete mode 100644 site/public/favicon-16x16.png delete mode 100644 site/public/favicon-32x32.png delete mode 100644 site/public/index.html delete mode 100644 site/public/manifest.json create mode 100644 site/public/style/global.css create mode 100644 site/public/style/home.css create mode 100644 site/sandbox.config.json delete mode 100644 site/src/App.js delete mode 100644 site/src/App.module.css create mode 100644 site/src/components/ReactCounter.jsx create mode 100644 site/src/components/Tour.astro delete mode 100644 site/src/fragments/Loading/Loading.js delete mode 100644 site/src/fragments/Loading/Loading.module.css delete mode 100644 site/src/fragments/Loading/index.js delete mode 100644 site/src/index.css delete mode 100644 site/src/index.js delete mode 100644 site/src/pages/Auth/Auth.js delete mode 100644 site/src/pages/Auth/Auth.module.css delete mode 100644 site/src/pages/Dashboard/Dashboard.js delete mode 100644 site/src/pages/Dashboard/Dashboard.module.css delete mode 100644 site/src/pages/Home/Home.js delete mode 100644 site/src/pages/Home/Home.module.css create mode 100644 site/src/pages/index.astro delete mode 100644 site/src/utils/helpers.js create mode 100644 site/tsconfig.json diff --git a/site/.gitignore b/site/.gitignore new file mode 100644 index 0000000..d436c6d --- /dev/null +++ b/site/.gitignore @@ -0,0 +1,18 @@ +# build output +dist + +# dependencies +node_modules/ +.snowpack/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/site/.npmrc b/site/.npmrc new file mode 100644 index 0000000..0cc653b --- /dev/null +++ b/site/.npmrc @@ -0,0 +1,2 @@ +## force pnpm to hoist +shamefully-hoist = true \ No newline at end of file diff --git a/site/.stackblitzrc b/site/.stackblitzrc new file mode 100644 index 0000000..43798ec --- /dev/null +++ b/site/.stackblitzrc @@ -0,0 +1,6 @@ +{ + "startCommand": "npm start", + "env": { + "ENABLE_CJS_IMPORTS": true + } +} \ No newline at end of file diff --git a/site/README.md b/site/README.md index 9c40dcd..1b16a82 100644 --- a/site/README.md +++ b/site/README.md @@ -1,68 +1,42 @@ -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). +# Welcome to [Astro](https://astro.build) -## Available Scripts +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/snowpackjs/astro/tree/latest/examples/starter) -In the project directory, you can run: +> πŸ§‘β€πŸš€ **Seasoned astronaut?** Delete this file. Have fun! -### `yarn start` +## πŸš€ Project Structure -Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser. +Inside of your Astro project, you'll see the following folders and files: -The page will reload if you make edits.
-You will also see any lint errors in the console. +``` +/ +β”œβ”€β”€ public/ +β”‚ β”œβ”€β”€ robots.txt +β”‚ └── favicon.ico +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ components/ +β”‚ β”‚ └── Tour.astro +β”‚ └── pages/ +β”‚ └── index.astro +└── package.json +``` -### `yarn test` +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. -Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. +There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. -### `yarn build` +Any static assets, like images, can be placed in the `public/` directory. -Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance. +## 🧞 Commands -The build is minified and the filenames include the hashes.
-Your app is ready to be deployed! +All commands are run from the root of the project, from a terminal: -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. +| Command | Action | +|:----------------|:--------------------------------------------| +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:3000` | +| `npm run build` | Build your production site to `./dist/` | -### `yarn eject` +## πŸ‘€ Want to learn more? -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting - -### Analyzing the Bundle Size - -This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size - -### Making a Progressive Web App - -This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app - -### Advanced Configuration - -This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration - -### Deployment - -This section has moved here: https://facebook.github.io/create-react-app/docs/deployment - -### `yarn build` fails to minify - -This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify +Feel free to check [our documentation](https://github.com/snowpackjs/astro) or jump into our [Discord server](https://astro.build/chat). diff --git a/site/astro.config.mjs b/site/astro.config.mjs new file mode 100644 index 0000000..9d9f9e1 --- /dev/null +++ b/site/astro.config.mjs @@ -0,0 +1,18 @@ +export default { + // projectRoot: '.', // Where to resolve all URLs relative to. Useful if you have a monorepo project. + // pages: './src/pages', // Path to Astro components, pages, and data + // dist: './dist', // When running `astro build`, path to final static output + // public: './public', // A folder of static files Astro will copy to the root. Useful for favicons, images, and other files that don’t need processing. + buildOptions: { + // site: 'http://example.com', // Your public domain, e.g.: https://my-site.dev/. Used to generate sitemaps and canonical URLs. + sitemap: true, // Generate sitemap (set to "false" to disable) + }, + devOptions: { + // hostname: 'localhost', // The hostname to run the dev server on. + // port: 3000, // The port to run the dev server on. + // tailwindConfig: '', // Path to tailwind.config.js if used, e.g. './tailwind.config.js' + }, + renderers: [ + "@astrojs/renderer-react" + ], +}; diff --git a/site/package.json b/site/package.json index 9525e65..02afecf 100644 --- a/site/package.json +++ b/site/package.json @@ -1,37 +1,15 @@ { - "name": "serverless-fullstack-app-website", - "version": "0.1.0", + "name": "@example/starter", + "version": "0.0.1", "private": true, - "dependencies": { - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.3.2", - "@testing-library/user-event": "^7.1.2", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "react-scripts": "3.4.3", - "js-cookie": "^2.2.1", - "moment": "^2.24.0", - "react-router-dom": "^5.1.2" - }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview" }, - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "devDependencies": { + "astro": "^0.20.7", + "@astrojs/renderer-react": "^0.2.1" } } diff --git a/site/public/android-chrome-192x192.png b/site/public/android-chrome-192x192.png deleted file mode 100644 index 050fdbf8cff72ee8d5b79bc48bc536a66c49632e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13072 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

AU}76m=?ViZaypt4q2joQ-z<3P*k#| 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 Hb>RO2Z#eg2 diff --git a/site/public/apple-touch-icon.png b/site/public/apple-touch-icon.png deleted file mode 100644 index eadddf25f499327316ac5eeab13ef3a79ed5ede1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11722 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 + + + + + diff --git a/site/public/favicon-16x16.png b/site/public/favicon-16x16.png deleted file mode 100644 index 8a3c249c266c438e37d2dbafdc2f35549e3aa7f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 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 aKFIH)2iNGXr(T|`6*wP^`G5n>IPgCKwBQv0 diff --git a/site/public/index.html b/site/public/index.html deleted file mode 100644 index 8263f8f..0000000 --- a/site/public/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - Forget Me Not - - - -

- - diff --git a/site/public/manifest.json b/site/public/manifest.json deleted file mode 100644 index 2ffa886..0000000 --- a/site/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "Forget Me Not", - "name": "Forget Me Not", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "android-chrome-192x192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "android-chrome-512x512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/site/public/robots.txt b/site/public/robots.txt index e9e57dc..1f53798 100644 --- a/site/public/robots.txt +++ b/site/public/robots.txt @@ -1,3 +1,2 @@ -# https://www.robotstxt.org/robotstxt.html User-agent: * -Disallow: +Disallow: / diff --git a/site/public/style/global.css b/site/public/style/global.css new file mode 100644 index 0000000..e1a3a6b --- /dev/null +++ b/site/public/style/global.css @@ -0,0 +1,28 @@ +* { + box-sizing: border-box; + margin: 0; +} + +:root { + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji; + font-size: 1rem; + --user-font-scale: 1rem - 16px; + font-size: clamp(0.875rem, 0.4626rem + 1.0309vw + var(--user-font-scale), 1.125rem); +} + +body { + padding: 4rem 2rem; + width: 100%; + min-height: 100vh; + display: grid; + justify-content: center; + background: #f9fafb; + color: #111827; +} + +@media (prefers-color-scheme: dark) { + body { + background: #111827; + color: #fff; + } +} diff --git a/site/public/style/home.css b/site/public/style/home.css new file mode 100644 index 0000000..39de76a --- /dev/null +++ b/site/public/style/home.css @@ -0,0 +1,53 @@ +:root { + --font-mono: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', 'Lucida Sans Typewriter', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Liberation Mono', + 'Nimbus Mono L', Monaco, 'Courier New', Courier, monospace; + --color-light: #f3f4f6; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-light: #1f2937; + } +} + +a { + color: inherit; +} + +header > div { + font-size: clamp(2rem, -0.4742rem + 6.1856vw, 2.75rem); +} + +header > div { + display: flex; + flex-direction: column; + align-items: center; +} + +header h1 { + font-size: 1em; + font-weight: 500; +} +header img { + width: 2em; + height: 2.667em; +} + +h2 { + font-weight: 500; + font-size: clamp(1.5rem, 1rem + 1.25vw, 2rem); +} + +.counter { + display: grid; + grid-auto-flow: column; + gap: 1em; + font-size: 2rem; + justify-content: center; + padding: 2rem 1rem; +} + +.counter > pre { + text-align: center; + min-width: 3ch; +} diff --git a/site/sandbox.config.json b/site/sandbox.config.json new file mode 100644 index 0000000..9178af7 --- /dev/null +++ b/site/sandbox.config.json @@ -0,0 +1,11 @@ +{ + "infiniteLoopProtection": true, + "hardReloadOnChange": false, + "view": "browser", + "template": "node", + "container": { + "port": 3000, + "startScript": "start", + "node": "14" + } +} diff --git a/site/serverless.yml b/site/serverless.yml index 845044b..f8d2181 100644 --- a/site/serverless.yml +++ b/site/serverless.yml @@ -6,6 +6,6 @@ inputs: src: src: ./ hook: npm run build - dist: build + dist: dist # Enable this when you want to set a custom domain. # domain: ${env:domain} diff --git a/site/src/App.js b/site/src/App.js deleted file mode 100644 index ce17c13..0000000 --- a/site/src/App.js +++ /dev/null @@ -1,58 +0,0 @@ -import React, { Component } from 'react' -import { - BrowserRouter as Router, - Switch, - Route, -} from 'react-router-dom' -import Home from './pages/Home/Home' -import Auth from './pages/Auth/Auth' -import Dashboard from './pages/Dashboard/Dashboard' -import { getSession } from './utils' - -export default class App extends Component { - - constructor(props) { - super(props) - this.state = {} - } - - async componentDidMount() { - // console.log(getSession()) - } - - render() { - return ( - - - - - - - - - - - - - - - - ) - } -} - -/** - * A component to protect routes. - * Shows Auth page if the user is not authenticated - */ -const PrivateRoute = ({ component, ...options }) => { - - const session = getSession() - - const finalComponent = session ? Dashboard : Home - return -} \ No newline at end of file diff --git a/site/src/App.module.css b/site/src/App.module.css deleted file mode 100644 index 14936b8..0000000 --- a/site/src/App.module.css +++ /dev/null @@ -1,333 +0,0 @@ -.container { - display: flex; - flex-direction: column; - align-content: center; - justify-content: center; - box-sizing: border-box; - overflow: hidden; - width: 100%; - height: 100vh; -} - -.containerInner { - display: flex; - flex-direction: column; - box-sizing: border-box; - background: #000; - width: 100%; - height: 100%; - align-self: center; - max-width: 700px; - padding: 50px 15px 30px 15px; -} - -.containerLoading { - display: flex; - flex-direction: row; - width: 100%; - height: auto; - justify-content: center; - align-content: center; - padding: 160px 0 0 0; -} - -.column { - display: flex; - flex-direction: row; - box-sizing: border-box; - height: 100%; - width: 50%; -} - -.row { - display: flex; - flex-direction: column; - box-sizing: border-box; - width: 100%; -} - -.heroArtwork { - display: flex; - flex-direction: row; - box-sizing: border-box; - align-content: center; - justify-content: center; - width: 100%; -} - -.heroArtwork img { - width: auto; - height: auto; - align-self: center; - max-height: 100%; - max-width: 500px; - user-select: none; -} - -.heroTitle { - display: flex; - flex-direction: row; - box-sizing: border-box; - align-content: center; - justify-content: center; - width: 100%; -} - -.heroTitle img { - width: auto; - height: auto; - align-self: center; - max-height: 100%; - max-width: 500px; - user-select: none; -} - -.heroDescription { - display: flex; - text-align: center; - font-size: 18px; - line-height: 30px; - margin: 10px 0 32px 0px; -} - -.error { - display: flex; - flex-direction: column; - width: 100%; - margin: 18px 0; - align-content: center; - justify-content: center; - text-align: center; - color: #FD5750; - font-size: 18px; -} - -.success { - display: flex; - flex-direction: column; - width: 100%; - margin: 32px 0; - align-content: center; - justify-content: center; - text-align: center; - text-transform: lowercase; - color: #78f542; - font-size: 22px; -} - -.containerRegister {} - -.containerSignIn {} - -.socialButtons { - display: flex; - flex-direction: row; - box-sizing: border-box; - margin: 15px auto 0px auto; - width: 100%; -} - -.buttonGithub { - display: flex; - flex-direction: row; - justify-content: center; - align-content: center; - box-sizing: border-box; - margin: 0 auto 10px auto; - width: 100%; - padding: 12px; - border-radius: 4px; - font-size: 19px; - font-weight: 500; - opacity: 0.6; - transition: all 0.3s ease; - text-transform: lowercase; -} - -.buttonGithub:hover { - cursor: pointer; - opacity: 1; -} - -.buttonGithub img { - max-height: 28px; - margin-right: 13px; - margin-top: 1.5px; -} - -.buttonGoogle { - display: flex; - flex-direction: row; - justify-content: center; - align-content: center; - box-sizing: border-box; - width: 100%; - padding: 12px; - border-radius: 4px; - font-size: 19px; - font-weight: 500; - opacity: 0.6; - transition: all 0.3s ease; - text-transform: lowercase; -} - -.buttonGoogle:hover { - cursor: pointer; - opacity: 1; -} - -.buttonGoogle img { - max-height: 25px; - margin-right: 11px; - margin-top: 3px; -} - -.formType { - display: flex; - flex-direction: row; - margin: 0px auto 0px auto; - width: 100%; - padding: 10px 0; - font-size: 22px; - color: rgba(255,255,255,0.6); - text-transform: lowercase; - user-select: none; -} - -.formTypeRegister { - display: flex; - width: 50%; - padding: 5px 40px 5px 0; - justify-content: flex-end; - border-right: 2px solid rgba(255,255,255,0.15); -} - -.formTypeRegister:hover { - cursor: pointer; -} - -.formTypeSignIn { - display: flex; - width: 50%; - padding: 5px 0 5px 40px; - text-align: left; -} - -.formTypeSignIn:hover { - cursor: pointer; -} - -.formTypeActive { - color: rgba(255,255,255,1); -} - -.form { - display: flex; - flex-direction: column; - max-width: 380px; - width: 100%; - margin: 10px auto 0 auto; - text-align: center; -} - -.formField { - display: flex; - flex-direction: column; - width: 100%; - margin-bottom: 25px; -} - - -.formLabel { - font-size: 19px; - font-weight: 500; - margin: 0 0 10px 0; - user-select: none; - display: none; -} - -.formInput { - text-align: center; - font-size: 22px; - padding: 10px 0px 22px 0px; - border-bottom: 1.5px solid rgba(255,255,255,0.4); - border-top: 1.5px solid transparent; - border-right: 1.5px solid transparent; - border-left: 1.5px solid transparent; - transition: all 0.6s ease; - background: none; - outline: none; - color: #ffffff; - caret-color: white; -} - -.formInput::placeholder { - text-align: center; - font-size: 22px; - color: rgba(255,255,255,0.5); - margin: 0; -} - -.formInput:focus { - border-bottom: 1.5px solid rgba(255,255,255,1); -} - -.formError { - margin: 10px 0 10px 0; - color: #FD5750; - font-size: 18px; - line-height: 32px; -} - -.formButton { - margin: 16px auto 0 auto!important; -} - -.formButton:hover { - cursor: pointer; - transform: scale(1.05); -} - -.formButton:active { - cursor: pointer; - transform: scale(1); -} - -.forgotPassword { - display: flex; - flex-direction: row; - justify-content: center; - align-content: center; - margin: 20px auto 5px auto; - width: 100%; - padding: 10px 0; - font-size: 19px; - color: rgba(255,255,255,0.6); - transition: all 0.3s ease; -} - -.forgotPassword:hover { - cursor: pointer; - color: rgba(255,255,255,1); -} - -.githubLink { - display: flex; - justify-content: center; - align-content: center; - width: 100%; - margin: 26px 0 40px 0; -} - -.githubLink a { - font-size: 20px; - color: #FD5750; - opacity: 0.7; - transition: all 0.3s ease; - text-decoration: none; -} - -.githubLink:hover a { - cursor: pointer; - opacity: 1; -} \ No newline at end of file diff --git a/site/src/components/ReactCounter.jsx b/site/src/components/ReactCounter.jsx new file mode 100644 index 0000000..ca34627 --- /dev/null +++ b/site/src/components/ReactCounter.jsx @@ -0,0 +1,15 @@ +import { useState } from 'react'; + +export default function ReactCounter() { + const [count, setCount] = useState(0); + const add = () => setCount((i) => i + 1); + const subtract = () => setCount((i) => i - 1); + + return ( +
+ +
{count}
+ +
+ ); +} diff --git a/site/src/components/Tour.astro b/site/src/components/Tour.astro new file mode 100644 index 0000000..71dbb74 --- /dev/null +++ b/site/src/components/Tour.astro @@ -0,0 +1,85 @@ +--- +import { Markdown } from 'astro/components'; +--- +
+ + +
+ + ## πŸš€ Project Structure + + Inside of your Astro project, you'll see the following folders and files: + + ``` + / + β”œβ”€β”€ public/ + β”‚ β”œβ”€β”€ robots.txt + β”‚ └── favicon.ico + β”œβ”€β”€ src/ + β”‚ β”œβ”€β”€ components/ + β”‚ β”‚ └── Tour.astro + β”‚ └── pages/ + β”‚ └── index.astro + └── package.json + ``` + + Astro looks for `.astro` or `.md` files in the `src/pages/` directory. + Each page is exposed as a route based on its file name. + + There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. + + Any static assets, like images, can be placed in the `public/` directory. + +
+ +
+

πŸ‘€ Want to learn more?

+

Feel free to check our documentation or jump into our Discord server.

+
+ +
+ + diff --git a/site/src/fragments/Loading/Loading.js b/site/src/fragments/Loading/Loading.js deleted file mode 100644 index a6d7725..0000000 --- a/site/src/fragments/Loading/Loading.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { Component } from 'react' -import styles from './Loading.module.css' - -export default class Loading extends Component { - - constructor(props) { - super(props) - this.state = {} - } - - async componentDidMount() {} - - render() { - return ( -
-
- - {`Loading`} - -

loading...

- -
-
- ) - } -} \ No newline at end of file diff --git a/site/src/fragments/Loading/Loading.module.css b/site/src/fragments/Loading/Loading.module.css deleted file mode 100644 index 6e319f5..0000000 --- a/site/src/fragments/Loading/Loading.module.css +++ /dev/null @@ -1,47 +0,0 @@ -.container { - display: flex; - flex-direction: column; - align-content: center; - justify-content: center; - box-sizing: border-box; - width: auto; - height: 100px; - opacity: 0.45; - text-align: center; -} - -.container img { - display: flex; - align-self: center; - height: 100%; - width: auto; - max-width: 100px; - max-height: 100px; - margin: 0 0 20px 0; - animation-duration: 0.4s; - animation-name: pulse; - animation-iteration-count: infinite; - animation-direction: alternate; - animation-timing-function: ease; - filter: none; - -webkit-filter: grayscale(100%); - -moz-filter: grayscale(100%); - -ms-filter: grayscale(100%); - -o-filter: grayscale(100%); -} - -.container p { - font-size: 22px; - color: rgba(255,255,255,0.5); -} - -@keyframes pulse { - from { - transform: scale(1); - } - - to { - transform: scale(1.15); - } -} - diff --git a/site/src/fragments/Loading/index.js b/site/src/fragments/Loading/index.js deleted file mode 100644 index 51e3f8b..0000000 --- a/site/src/fragments/Loading/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Loading' \ No newline at end of file diff --git a/site/src/index.css b/site/src/index.css deleted file mode 100644 index 5ee888f..0000000 --- a/site/src/index.css +++ /dev/null @@ -1,123 +0,0 @@ -html, body, #root { - display: block; - width: 100%; - height: 100%; - min-height: 100vh; - box-sizing: border-box; - background: #000; - color: #ffffff; - margin: 0; - font-family: 'Titillium Web', sans-serif; - font-weight: 500; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-size: 18px; -} - -div, h1, h2, h3, h4, h5, h6, p, span, input, button, li { - font-family: 'Titillium Web', sans-serif; - font-size: 24px; - color: #ffffff; -} - -/** - * Links - */ - -a, .link { - font-family: 'Titillium Web', sans-serif; - font-size: 24px; - font-weight: 400; - color: rgba(255,255,255,0.6); - text-decoration: none; - transition: all 0.14s ease; -} - -a:hover, .link:hover { - cursor: pointer; - color: rgba(255,255,255,1); -} - -a:active, .link:active { - color: rgba(255,255,255,0.6); -} - -/** - * Buttons - */ - -.buttonPrimaryLarge { - text-align: center; - font-size: 18px; - width: 100%; - max-width: 360px; - height: auto; - margin: 20px 0 0 0; - padding: 24px 24px 28px 24px; - background: #fd5750; - color: #fff; - font-family: 'Titillium Web', sans-serif; - font-size: 24px; - font-weight: 600; - border-radius: 4px; - border: 0px; - transition: all 0.14s ease; - user-select: none; - outline: none; - text-transform: lowercase; -} - -.buttonPrimaryLarge:hover { - cursor: pointer; - transform: scale(1.03); -} - -.buttonPrimaryLarge:active { - cursor: pointer; - transform: scale(1); - outline: none; -} - -/** - * Animations - */ - -.animateFadeIn { - animation: fadeIn 0.45s; -} - -.animateScaleIn { - animation: scaleIn 0.35s; -} - -.animateFlicker { - animation: flicker 2.5s infinite; -} - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -@keyframes scaleIn { - from { - opacity: 0; - transform: scale(0.8); - } - to { - opacity: 1; - transform: scale(1); - } -} - -@keyframes flicker { - 0% { - opacity: 0.3; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0.3; - } -} \ No newline at end of file diff --git a/site/src/index.js b/site/src/index.js deleted file mode 100644 index 9e3c542..0000000 --- a/site/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' -import App from './App' -import './index.css' - -/** - * Render App - */ - -ReactDOM.render( - - - , - document.getElementById('root') -) \ No newline at end of file diff --git a/site/src/pages/Auth/Auth.js b/site/src/pages/Auth/Auth.js deleted file mode 100644 index 3477728..0000000 --- a/site/src/pages/Auth/Auth.js +++ /dev/null @@ -1,249 +0,0 @@ -import React, { Component } from 'react' -import { - Link, - withRouter, -} from 'react-router-dom' -import Loading from '../../fragments/Loading' -import styles from './Auth.module.css' -import { - userRegister, - userLogin, - userGet, - saveSession, -} from '../../utils' - -class Auth extends Component { - - constructor(props) { - super(props) - - const pathName = window.location.pathname.replace('/', '') - - this.state = {} - this.state.state = pathName - this.state.loading = true - this.state.error = null - this.state.formEmail = '' - this.state.formPassword = '' - - // Bindings - this.handleFormInput = this.handleFormInput.bind(this) - this.handleFormSubmit = this.handleFormSubmit.bind(this) - this.handleFormTypeChange = this.handleFormTypeChange.bind(this) - } - - /** - * Component did mount - */ - componentDidMount() { - this.setState({ - loading: false - }) - - // Clear query params - const url = document.location.href - window.history.pushState({}, '', url.split('?')[0]) - } - - /** - * Handles a form change - */ - handleFormTypeChange(type) { - this.setState({ state: type }, - () => { - this.props.history.push(`/${type}`) - }) - } - - /** - * Handle text changes within form fields - */ - handleFormInput(field, value) { - value = value.trim() - - const nextState = {} - nextState[field] = value - - this.setState(Object.assign(this.state, nextState)) - } - - /** - * Handles form submission - * @param {object} evt - */ - async handleFormSubmit(evt) { - evt.preventDefault() - - this.setState({ loading: true }) - - // Validate email - if (!this.state.formEmail) { - return this.setState({ - loading: false, - formError: 'email is required' - }) - } - - // Validate password - if (!this.state.formPassword) { - return this.setState({ - loading: false, - formError: 'password is required' - }) - } - - let token - try { - if (this.state.state === 'register') { - token = await userRegister(this.state.formEmail, this.state.formPassword) - } else { - token = await userLogin(this.state.formEmail, this.state.formPassword) - } - } catch (error) { - console.log(error) - if (error.message) { - this.setState({ - formError: error.message, - loading: false - }) - } else { - this.setState({ - formError: 'Sorry, something unknown went wrong. Please try again.', - loading: false - }) - } - return - } - - // Fetch user record and set session in cookie - let user = await userGet(token.token) - user = user.user - saveSession(user.id, user.email, token.token) - - window.location.replace('/') - } - - render() { - - return ( -
-
- - { /* Logo */} - - - serverless-fullstack-application - - - { /* Loading */} - - {this.state.loading && ( -
- {< Loading className={styles.containerLoading} />} -
- )} - - { /* Registration Form */} - - {!this.state.loading && ( -
-
{ this.handleFormTypeChange('register') }}> - Register -
-
{ this.handleFormTypeChange('login') }}> - Sign-In -
-
- )} - - {this.state.state === 'register' && !this.state.loading && ( -
- -
-
- - { this.handleFormInput('formEmail', e.target.value) }} - /> -
-
- - { this.handleFormInput('formPassword', e.target.value) }} - /> -
- - {this.state.formError && ( -
{this.state.formError}
- )} - - - -
-
- )} - - {this.state.state === 'login' && !this.state.loading && ( -
- -
-
- - { this.handleFormInput('formEmail', e.target.value) }} - /> -
-
- - { this.handleFormInput('formPassword', e.target.value) }} - /> -
- - {this.state.formError && ( -
{this.state.formError}
- )} - - -
-
- )} -
-
- ) - } -} - -export default withRouter(Auth) \ No newline at end of file diff --git a/site/src/pages/Auth/Auth.module.css b/site/src/pages/Auth/Auth.module.css deleted file mode 100644 index 044b349..0000000 --- a/site/src/pages/Auth/Auth.module.css +++ /dev/null @@ -1,231 +0,0 @@ -.container { - display: flex; - flex-direction: column; - align-content: center; - justify-content: center; - box-sizing: border-box; - overflow: hidden; - width: 100%; - height: 100vh; -} - -.containerInner { - display: flex; - flex-direction: column; - box-sizing: border-box; - background: #000; - width: 100%; - height: 100%; - align-self: center; - max-width: 700px; - padding: 50px 15px 30px 15px; -} - -.containerLoading { - display: flex; - flex-direction: row; - width: 100%; - height: auto; - justify-content: center; - align-content: center; - padding: 160px 0 0 0; -} - -.logo { - display: flex; - flex-direction: row; - box-sizing: border-box; - align-content: center; - justify-content: center; - width: 100%; -} - -.logo img { - width: auto; - height: auto; - align-self: center; - max-height: 100%; - max-width: 400px; - user-select: none; -} - -.error { - display: flex; - flex-direction: column; - width: 100%; - margin: 18px 0; - align-content: center; - justify-content: center; - text-align: center; - color: #FD5750; - font-size: 18px; -} - -.success { - display: flex; - flex-direction: column; - width: 100%; - margin: 32px 0; - align-content: center; - justify-content: center; - text-align: center; - text-transform: lowercase; - color: #78f542; - font-size: 22px; -} - -.containerRegister {} - -.containerSignIn {} - -.formType { - display: flex; - flex-direction: row; - margin: 26px auto 0px auto; - width: 100%; - padding: 10px 0; - font-size: 22px; - color: rgba(255,255,255,0.6); - text-transform: lowercase; - user-select: none; -} - -.formTypeRegister { - display: flex; - width: 50%; - padding: 5px 40px 5px 0; - justify-content: flex-end; - border-right: 2px solid rgba(255,255,255,0.15); - color: rgba(255,255,255,0.6); -} - -.formTypeRegister:hover { - cursor: pointer; -} - -.formTypeSignIn { - display: flex; - width: 50%; - padding: 5px 0 5px 40px; - text-align: left; - color: rgba(255,255,255,0.6); -} - -.formTypeSignIn:hover { - cursor: pointer; -} - -.formTypeActive { - color: rgba(255,255,255,1); -} - -.form { - display: flex; - flex-direction: column; - max-width: 380px; - width: 100%; - margin: 10px auto 0 auto; - text-align: center; -} - -.formField { - display: flex; - flex-direction: column; - width: 100%; - margin-bottom: 25px; -} - - -.formLabel { - font-size: 19px; - font-weight: 500; - margin: 0 0 10px 0; - user-select: none; - display: none; -} - -.formInput { - text-align: center; - font-size: 22px; - padding: 10px 0px 22px 0px; - border-bottom: 1.5px solid rgba(255,255,255,0.4); - border-top: 1.5px solid transparent; - border-right: 1.5px solid transparent; - border-left: 1.5px solid transparent; - transition: all 0.6s ease; - background: none; - outline: none; - color: #ffffff; - caret-color: white; -} - -.formInput::placeholder { - text-align: center; - font-size: 22px; - color: rgba(255,255,255,0.5); - margin: 0; -} - -.formInput:focus { - border-bottom: 1.5px solid rgba(255,255,255,1); -} - -.formError { - margin: 10px 0 10px 0; - color: #FD5750; - font-size: 18px; - line-height: 32px; -} - -.formButton { - margin: 16px auto 0 auto!important; -} - -.formButton:hover { - cursor: pointer; - transform: scale(1.05); -} - -.formButton:active { - cursor: pointer; - transform: scale(1); -} - -.forgotPassword { - display: flex; - flex-direction: row; - justify-content: center; - align-content: center; - margin: 20px auto 5px auto; - width: 100%; - padding: 10px 0; - font-size: 19px; - color: rgba(255,255,255,0.6); - transition: all 0.3s ease; -} - -.forgotPassword:hover { - cursor: pointer; - color: rgba(255,255,255,1); -} - -.githubLink { - display: flex; - justify-content: center; - align-content: center; - width: 100%; - margin: 26px 0 40px 0; -} - -.githubLink a { - font-size: 20px; - color: #FD5750; - opacity: 0.7; - transition: all 0.3s ease; - text-decoration: none; -} - -.githubLink:hover a { - cursor: pointer; - opacity: 1; -} \ No newline at end of file diff --git a/site/src/pages/Dashboard/Dashboard.js b/site/src/pages/Dashboard/Dashboard.js deleted file mode 100644 index 20dfd8d..0000000 --- a/site/src/pages/Dashboard/Dashboard.js +++ /dev/null @@ -1,82 +0,0 @@ -import React, { Component } from 'react' -import { - withRouter -} from 'react-router-dom' -import styles from './Dashboard.module.css' -import { - getSession, - deleteSession -} from '../../utils' - -class Dashboard extends Component { - - constructor(props) { - super(props) - this.state = {} - - // Bindings - this.logout = this.logout.bind(this) - } - - async componentDidMount() { - - const userSession = getSession() - - this.setState({ - session: userSession, - }) - } - - /** - * Log user out by clearing cookie and redirecting - */ - logout() { - deleteSession() - this.props.history.push(`/`) - } - - render() { - - return ( -
-
- - { /* Navigation */ } - -
-
- { this.state.session ? this.state.session.userEmail : '' } -
-
- logout -
-
- - { /* Content */ } - -
- -
- serverless-fullstack-application -
- -
- Welcome to your serverless fullstack dashboard... -
- -
- -
-
- ) - } -} - -export default withRouter(Dashboard) \ No newline at end of file diff --git a/site/src/pages/Dashboard/Dashboard.module.css b/site/src/pages/Dashboard/Dashboard.module.css deleted file mode 100644 index 9bcde3f..0000000 --- a/site/src/pages/Dashboard/Dashboard.module.css +++ /dev/null @@ -1,92 +0,0 @@ -.container { - display: flex; - flex-direction: column; - align-content: center; - justify-content: center; - box-sizing: border-box; - overflow: hidden; - width: 100%; - height: 100vh; -} - -.containerInner { - display: flex; - flex-direction: column; - box-sizing: border-box; - background: #000; - width: 100%; - height: 100%; - padding: 0 0 30px 0; -} - -.navigationContainer { - display: flex; - flex-direction: row; - justify-content: flex-end; - align-content: center; - box-sizing: border-box; - background: #000; - width: 100%; - height: 80px; - padding: 25px 45px 0 45px; -} - -.navigationContainer div { - margin-left: 40px; -} - -.contentContainer { - display: flex; - flex-direction: column; - align-content: center; - box-sizing: border-box; - background: #000; - width: 100%; - height: 100%; - padding: 7% 15px 45px 15px; -} - -.welcomeMessage { - display: flex; - flex-direction: column; - align-content: center; - text-align: center; - width: 100%; - height: auto; - font-size: 28px; -} - -.artwork { - display: flex; - flex-direction: row; - box-sizing: border-box; - align-content: center; - justify-content: center; - width: 100%; - height: 250px; -} - -.artwork img { - width: auto; - height: auto; - align-self: center; - max-height: 100%; - max-width: 500px; - user-select: none; -} - -/** - * Special - */ - -::-moz-selection { - background: #fd5750; - color: #ffffff; - opacity: 1; -} - -::selection { - background: #fd5750; - color: #ffffff; - opacity: 1; -} \ No newline at end of file diff --git a/site/src/pages/Home/Home.js b/site/src/pages/Home/Home.js deleted file mode 100644 index a9675d7..0000000 --- a/site/src/pages/Home/Home.js +++ /dev/null @@ -1,64 +0,0 @@ -import React, { Component } from 'react' -import { - Link, - withRouter -} from 'react-router-dom' -import styles from './Home.module.css' - -class Home extends Component { - - constructor(props) { - super(props) - this.state = {} - } - - async componentDidMount() { } - - render() { - - return ( -
-
- - { /* Hero Artwork */} - -
- serverless-fullstack-application -
-
- serverless-fullstack-application -
- - { /* Hero Description */} - -
- A serverless full-stack application built with AWS Lambda, AWS HTTP API, Express.js, React & AWS DynamoDB. -
- - { /* Call To Action */} - -
- - - - - - sign-in -
-
-
- ) - } -} - -export default withRouter(Home) \ No newline at end of file diff --git a/site/src/pages/Home/Home.module.css b/site/src/pages/Home/Home.module.css deleted file mode 100644 index f30d520..0000000 --- a/site/src/pages/Home/Home.module.css +++ /dev/null @@ -1,105 +0,0 @@ -.container { - display: flex; - flex-direction: column; - align-content: center; - justify-content: center; - box-sizing: border-box; - overflow: hidden; - width: 100%; - height: 100vh; -} - -.containerInner { - display: flex; - flex-direction: column; - box-sizing: border-box; - background: #000; - width: 100%; - height: 100%; - align-self: center; - max-width: 700px; - padding: 50px 15px 30px 15px; -} - -.heroArtwork { - display: flex; - flex-direction: row; - box-sizing: border-box; - align-content: center; - justify-content: center; - width: 100%; -} - -.heroArtwork img { - width: auto; - height: auto; - align-self: center; - max-height: 100%; - max-width: 500px; - user-select: none; -} - -.heroTitle { - display: flex; - flex-direction: row; - box-sizing: border-box; - align-content: center; - justify-content: center; - width: 100%; -} - -.heroTitle img { - width: auto; - height: auto; - align-self: center; - max-height: 100%; - max-width: 500px; - user-select: none; -} - -.heroDescription { - display: flex; - text-align: center; - font-weight: 400; - font-size: 24px; - line-height: 38px; - margin: 32px 0px 52px 0; -} - -.containerCta { - display: flex; - flex-direction: column; - justify-content: center; - align-content: center; - text-align: center; -} - -.containerCta button { - margin: 0px auto 20px auto; -} - -.containerCta .linkSignIn { - padding: 10px; - color: #fd5750; - opacity: 0.65; -} - -.containerCta .linkSignIn:hover { - opacity: 1; -} - -/** - * Special - */ - -::-moz-selection { - background: #fd5750; - color: #ffffff; - opacity: 1; -} - -::selection { - background: #fd5750; - color: #ffffff; - opacity: 1; -} \ No newline at end of file diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro new file mode 100644 index 0000000..60ba465 --- /dev/null +++ b/site/src/pages/index.astro @@ -0,0 +1,58 @@ +--- +// Component Imports +import Tour from '../components/Tour.astro'; +// You can import components from any supported Framework here! +import ReactCounter from '../components/ReactCounter.jsx'; + +// Component Script: +// You can write any JavaScript/TypeScript that you'd like here. +// It will run during the build, but never in the browser. +// All variables are available to use in the HTML template below. +let title = 'My Astro Site'; + +// Full Astro Component Syntax: +// https://docs.astro.build/core-concepts/astro-components/ +--- + + + + + {title} + + + + + + + + + +
+
+
+ Astro logo +

Welcome to Astro

+
+
+ + + + + +
+ + diff --git a/site/src/utils/helpers.js b/site/src/utils/helpers.js deleted file mode 100644 index 73c63ac..0000000 --- a/site/src/utils/helpers.js +++ /dev/null @@ -1,76 +0,0 @@ -import Cookies from 'js-cookie' - -/** - * Format Org and Username correctly for the Serverless Platform backend - */ -export const formatOrgAndUsername = (name = '') => { - name = name.toString().toLowerCase().replace(/[^a-z\d-]+/gi, '-') - // Remove multiple instances of hyphens - name = name.replace(/-{2,}/g, '-') - if (name.length > 40) { - name = name.substring(0, 40) - } - return name -} - -/** - * Parse query parameters in a URL - * @param {*} searchString - */ -export const parseQueryParams = (searchString = null) => { - if (!searchString) { - return null - } - - // Clone string - let clonedParams = (' ' + searchString).slice(1) - - return clonedParams - .substr(1) - .split('&') - .filter((el) => el.length) - .map((el) => el.split('=')) - .reduce( - (accumulator, currentValue) => - Object.assign(accumulator, { - [decodeURIComponent(currentValue.shift())]: decodeURIComponent(currentValue.pop()) - }), - {} - ) -} - -/** - * Parse hash fragment parameters in a URL - */ -export const parseHashFragment = (hashString) => { - const hashData = {} - let hash = decodeURI(hashString) - hash = hash.split('&') - hash.forEach((val) => { - val = val.replace('#', '') - hashData[val.split('=')[0]] = val.split('=')[1] - }) - return hashData -} - -/** - * Save session in browser cookie - */ -export const saveSession = (userId, userEmail, userToken) => { - Cookies.set('serverless', { userId, userEmail, userToken }) -} - -/** - * Get session in browser cookie - */ -export const getSession = () => { - const data = Cookies.get('serverless') - return data ? JSON.parse(data) : null -} - -/** - * Delete session in browser cookie - */ -export const deleteSession = () => { - Cookies.remove('serverless') -} \ No newline at end of file diff --git a/site/src/utils/index.js b/site/src/utils/index.js index 5bfa17a..201fc0f 100644 --- a/site/src/utils/index.js +++ b/site/src/utils/index.js @@ -1,2 +1 @@ -export * from './helpers' export * from './api' \ No newline at end of file diff --git a/site/tsconfig.json b/site/tsconfig.json new file mode 100644 index 0000000..44465b1 --- /dev/null +++ b/site/tsconfig.json @@ -0,0 +1,3 @@ +{ + "moduleResolution": "node" +}