├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── next-env.d.ts ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── _app.tsx └── index.tsx ├── postcss.config.js ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── favicon.png ├── images │ ├── avatar.png │ └── pluto-coming-soon.png └── site.webmanifest ├── styles.css ├── tailwind.config.js └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es2021: true 5 | }, 6 | extends: ['plugin:react/recommended', 'standard', 'plugin:prettier/recommended'], 7 | parser: '@typescript-eslint/parser', 8 | parserOptions: { 9 | ecmaFeatures: { 10 | jsx: true 11 | }, 12 | ecmaVersion: 12, 13 | sourceType: 'module' 14 | }, 15 | plugins: ['react', '@typescript-eslint'], 16 | rules: { 17 | 'react/react-in-jsx-scope': 'off', 18 | 'prettier/prettier': ['error', {}, { usePrettierrc: true }] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | 21 | # debug 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # local env files 27 | .env.local 28 | .env.development.local 29 | .env.test.local 30 | .env.production.local 31 | .env 32 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "semi": false, 5 | "trailingComma": "none", 6 | "singleQuote": true, 7 | "printWidth": 120, 8 | "arrowParens": "avoid" 9 | } 10 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | async redirects() { 3 | return [ 4 | { 5 | source: '/posts/index.xml', 6 | destination: 'https://spencerwoo.com/feed', 7 | permanent: false 8 | }, 9 | { 10 | source: '/feed.xml', 11 | destination: 'https://spencerwoo.com/feed', 12 | permanent: false 13 | }, 14 | { 15 | source: '/feed', 16 | destination: 'https://spencerwoo.com/feed', 17 | permanent: false 18 | }, 19 | { 20 | source: '/:year/:month/:slug*', 21 | destination: 'https://spencerwoo.com/blog/:slug*', 22 | permanent: false 23 | }, 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-notion-blog", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "dev": "next", 6 | "build": "next build", 7 | "start": "next start", 8 | "format": "prettier --write pages/ *.{js,ts,json,css}" 9 | }, 10 | "license": "MIT", 11 | "dependencies": { 12 | "next": "^12.0.7", 13 | "next-themes": "^0.0.15" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "^17.0.4", 17 | "@types/react": "^17.0.38", 18 | "@typescript-eslint/eslint-plugin": "^4.21.0", 19 | "@typescript-eslint/parser": "^4.21.0", 20 | "autoprefixer": "^10.4.0", 21 | "eslint": "^7.23.0", 22 | "eslint-config-next": "^11.0.0", 23 | "eslint-config-prettier": "^8.0.0", 24 | "eslint-config-standard": "^16.0.2", 25 | "eslint-plugin-import": "^2.22.1", 26 | "eslint-plugin-node": "^11.1.0", 27 | "eslint-plugin-prettier": "^3.3.1", 28 | "eslint-plugin-promise": "^4.3.1", 29 | "eslint-plugin-react": "^7.23.1", 30 | "eslint-plugin-react-hooks": "^4.2.0", 31 | "postcss": "^8.4.5", 32 | "prettier": "^2.2.1", 33 | "tailwindcss": "^3.0.7", 34 | "typescript": "^4.1.5" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { AppProps } from 'next/app' 2 | import { ThemeProvider } from 'next-themes' 3 | import '../styles.css' 4 | 5 | export default function MyApp({ Component, pageProps }: AppProps) { 6 | return ( 7 | 8 | 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import Image from 'next/image' 3 | 4 | import headerImage from '../public/images/pluto-coming-soon.png' 5 | import avatar from '../public/images/avatar.png' 6 | 7 | const HomePage = () => { 8 | return ( 9 | <> 10 | 11 | Spencer's Blog 12 | 13 |
14 |
15 |
16 | new-domain 17 |
18 | hi there, we have moved / hi ann, tha sinn air gluasad / привет мы переехали / こんにちは、引っ越しました 19 | / 你好,我们搬家了 / 你好,我們搬家了 / hallo daar, we zijn verhuisd / bonjour, nous avons déménagé 20 |
21 | 22 | 28 | go check it out 29 | 30 | 35 | 36 | 37 |
38 |
39 | 40 |
41 |
42 | avatar 43 |
44 |

spencer woo at 2021

45 |
46 |
47 | 48 | ) 49 | } 50 | 51 | export default HomePage 52 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {} 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/favicon.png -------------------------------------------------------------------------------- /public/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/images/avatar.png -------------------------------------------------------------------------------- /public/images/pluto-coming-soon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spencerwooo/react-notion-blog/9c2c8d1ceca88f29c291c4251d59a5cc736dfa16/public/images/pluto-coming-soon.png -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, 6 | { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } 7 | ], 8 | "theme_color": "#ffffff", 9 | "background_color": "#ffffff", 10 | "display": "standalone" 11 | } 12 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500&family=Noto+Sans:wght@400;700&display=swap'); 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const defaultTheme = require('tailwindcss/defaultTheme') 2 | const colors = require('tailwindcss/colors') 3 | 4 | module.exports = { 5 | content: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], 6 | darkMode: 'class', 7 | theme: { 8 | colors: { 9 | transparent: 'transparent', 10 | current: 'currentColor', 11 | black: colors.black, 12 | white: colors.white, 13 | gray: colors.neutral, 14 | red: colors.rose, 15 | yellow: colors.amber, 16 | green: colors.green, 17 | blue: colors.sky, 18 | indigo: colors.indigo, 19 | purple: colors.purple, 20 | pink: colors.pink 21 | }, 22 | extend: { 23 | fontFamily: { 24 | sans: ['Rubik', '"Noto Sans SC"', ...defaultTheme.fontFamily.sans] 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "alwaysStrict": true, 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "isolatedModules": true, 8 | "jsx": "preserve", 9 | "lib": ["dom", "es2017"], 10 | "module": "esnext", 11 | "moduleResolution": "node", 12 | "noEmit": true, 13 | "noFallthroughCasesInSwitch": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "resolveJsonModule": true, 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "target": "esnext", 20 | "incremental": true 21 | }, 22 | "exclude": ["node_modules"], 23 | "include": ["**/*.ts", "**/*.tsx"] 24 | } 25 | --------------------------------------------------------------------------------