├── .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 |
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 |
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 |
--------------------------------------------------------------------------------