├── .editorconfig ├── .eslintrc ├── .github └── FUNDING.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .prettierignore ├── .prettierrc ├── README.md ├── next-env.d.ts ├── package.json ├── postcss.config.js ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── fonts │ └── dela-gothic-one │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.0.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.1.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.10.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.100.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.101.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.102.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.103.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.104.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.105.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.106.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.107.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.108.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.109.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.11.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.110.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.111.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.112.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.113.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.114.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.115.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.116.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.117.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.118.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.119.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.12.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.13.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.14.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.15.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.16.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.17.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.18.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.19.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.2.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.20.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.21.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.22.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.23.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.24.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.25.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.26.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.27.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.28.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.29.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.3.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.30.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.31.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.32.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.33.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.34.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.35.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.36.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.37.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.38.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.39.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.4.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.40.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.41.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.42.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.43.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.44.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.45.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.46.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.47.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.48.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.49.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.5.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.50.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.51.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.54.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.55.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.56.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.57.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.58.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.59.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.6.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.60.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.61.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.62.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.63.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.64.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.65.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.66.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.67.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.68.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.69.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.7.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.70.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.71.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.72.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.73.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.74.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.75.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.76.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.77.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.78.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.79.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.8.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.80.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.81.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.82.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.83.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.84.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.85.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.86.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.87.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.88.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.89.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.9.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.90.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.91.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.92.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.93.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.94.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.95.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.96.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.97.woff2 │ │ ├── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.98.woff2 │ │ └── hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.99.woff2 ├── illustration │ ├── email-heart.svg │ └── paper-plane.svg ├── images │ ├── facebook.png │ ├── logo-128.png │ ├── logo-512.png │ └── og-image.png ├── loading.svg └── site.webmanifest ├── src ├── components │ ├── button.tsx │ ├── icons │ │ ├── arrow.tsx │ │ ├── check.tsx │ │ ├── copy.tsx │ │ ├── external-link.tsx │ │ └── index.ts │ ├── index.ts │ ├── input.tsx │ ├── layout │ │ ├── auth.tsx │ │ ├── footer.tsx │ │ ├── header.tsx │ │ └── layout.tsx │ ├── partials │ │ ├── error.tsx │ │ ├── explain.tsx │ │ ├── result.tsx │ │ ├── saved-item.tsx │ │ └── user-status.tsx │ └── seo.tsx ├── constants │ ├── config.const.ts │ ├── interface.const.ts │ └── url.const.ts ├── pages │ ├── _app.tsx │ ├── _document.tsx │ ├── api │ │ ├── saved.ts │ │ └── shhh.ts │ ├── index.tsx │ ├── login.tsx │ └── saved.tsx ├── stores │ ├── auth.store.ts │ └── loading.store.ts ├── styles │ ├── fonts.css │ └── global.css └── utils │ ├── fetcher.ts │ ├── formatter.ts │ ├── generator.ts │ ├── input.ts │ ├── middleware.ts │ ├── supabase.ts │ └── validator.ts ├── tailwind.config.js ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "amd": true, 5 | "es6": true, 6 | "node": true 7 | }, 8 | "ignorePatterns": ["out/**/*"], 9 | "extends": [ 10 | "eslint:recommended", 11 | "plugin:@typescript-eslint/recommended", 12 | "next" 13 | ], 14 | "parser": "@typescript-eslint/parser", 15 | "parserOptions": { 16 | "sourceType": "module", 17 | "ecmaFeatures": { 18 | "impliedStrict": true 19 | } 20 | }, 21 | "plugins": ["@typescript-eslint"], 22 | "rules": { 23 | "@typescript-eslint/interface-name-prefix": "off", 24 | "@typescript-eslint/explicit-function-return-type": "off", 25 | "@typescript-eslint/no-explicit-any": "off", 26 | "@typescript-eslint/explicit-module-boundary-types": "off", 27 | "@typescript-eslint/no-unused-vars": "off", 28 | "@typescript-eslint/ban-types": "off", 29 | "@next/next/no-img-element": "off", 30 | "semi": ["error", "never"], 31 | "quotes": ["error", "single"], 32 | "indent": ["error", 2, { "SwitchCase": 1 }], 33 | "object-curly-spacing": ["error", "always"] 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: monodyle 2 | -------------------------------------------------------------------------------- /.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 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | # env 37 | .env 38 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn lint 5 | npx lint-staged 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .husky 3 | .next 4 | .vercel 5 | out 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "printWidth": 80, 6 | "tabWidth": 2 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodeLeak 🔗 2 | 3 | 4 | 5 | Share link like an anon! 6 | 7 | ## What is this? 8 | 9 | This is a service that save your link as a code and share with others, then 10 | they can paste it back to decode. Everything in a few clicks. 11 | 12 | Example: I can encode `http://github.com/monodyle/share-code` to a random 13 | string like `W4G890Q2`. If someone using `W4G890Q2` to reveal, they will get 14 | `http://github.com/monodyle/share-code`. 15 | 16 | ## Try it now 17 | 18 | You can try it [here](https://codeleak.me). 19 | 20 | ## Features 21 | 22 | - Encode a link as code 23 | - Reveal code for the link 24 | - Save all encoded links on account 25 | 26 | ## Bug reports or Feature request 27 | 28 | If you encounter a bug or have a feature request, you can [create an issue], or 29 | [create a discussion]. 30 | 31 | [create an issue]: https://github.com/monodyle/share-code/issues/new 32 | [create a discussion]: https://github.com/monodyle/codeleak/discussions/new 33 | 34 | ## Support 35 | 36 | If you wish to support further development and feel extra awesome, you can do so [here][kofi]. 37 | 38 | [kofi]: https://ko-fi.com/monodyle 39 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | 5 | // NOTE: This file should not be edited 6 | // see https://nextjs.org/docs/basic-features/typescript for more information. 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeleak", 3 | "description": "Share link like an anon!", 4 | "version": "1.0.0", 5 | "license": "MIT", 6 | "scripts": { 7 | "start": "next start", 8 | "dev": "yarn && next", 9 | "build": "next build", 10 | "prepare": "husky install", 11 | "lint": "eslint --fix .", 12 | "format": "prettier --write .", 13 | "precommit": "prettier --write . && eslint --fix ." 14 | }, 15 | "dependencies": { 16 | "@supabase/supabase-js": "^1.21.1", 17 | "copy-to-clipboard": "^3.3.1", 18 | "cors": "^2.8.5", 19 | "jotai": "^1.3.0", 20 | "next": "^11.1.1", 21 | "react": "^17.0.2", 22 | "react-dom": "^17.0.2" 23 | }, 24 | "devDependencies": { 25 | "@types/cors": "^2.8.12", 26 | "@types/node": "^16.6.1", 27 | "@types/react": "^17.0.17", 28 | "@types/react-dom": "^17.0.9", 29 | "@typescript-eslint/eslint-plugin": "4.29.1", 30 | "@typescript-eslint/eslint-plugin-tslint": "^4.29.1", 31 | "@typescript-eslint/parser": "4.29.1", 32 | "autoprefixer": "^10.3.1", 33 | "eslint": "7.32.0", 34 | "eslint-config-next": "^11.1.0", 35 | "eslint-config-prettier": "8.3.0", 36 | "eslint-plugin-prettier": "3.4.0", 37 | "eslint-plugin-react": "7.24.0", 38 | "husky": "^6.0.0", 39 | "lint-staged": "11.1.2", 40 | "organize-imports-cli": "^0.8.0", 41 | "postcss": "^8.3.6", 42 | "prettier": "2.3.2", 43 | "tailwindcss": "^2.2.7", 44 | "typescript": "^4.3.5" 45 | }, 46 | "husky": { 47 | "hooks": { 48 | "pre-commit": "pretty-quick --staged && yarn lint" 49 | } 50 | }, 51 | "lint-staged": { 52 | "*.{ts,tsx}": [ 53 | "organize-imports-cli", 54 | "prettier --write " 55 | ], 56 | "**/*": [ 57 | "prettier --write --ignore-unknown" 58 | ] 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.0.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.1.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.1.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.10.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.10.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.100.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.100.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.101.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.101.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.102.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.102.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.103.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.103.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.104.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.104.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.105.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.105.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.106.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.106.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.107.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.107.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.108.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.108.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.109.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.109.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.11.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.11.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.110.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.110.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.111.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.111.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.112.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.112.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.113.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.113.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.114.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.114.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.115.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.115.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.116.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.116.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.117.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.117.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.118.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.118.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.119.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.119.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.12.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.12.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.13.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.13.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.14.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.14.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.15.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.15.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.16.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.16.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.17.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.17.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.18.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.18.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.19.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.19.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.2.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.2.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.20.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.20.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.21.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.21.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.22.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.22.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.23.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.23.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.24.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.24.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.25.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.25.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.26.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.26.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.27.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.27.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.28.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.28.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.29.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.29.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.3.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.3.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.30.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.30.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.31.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.31.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.32.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.32.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.33.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.33.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.34.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.34.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.35.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.35.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.36.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.36.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.37.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.37.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.38.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.38.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.39.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.39.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.4.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.40.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.40.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.41.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.41.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.42.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.42.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.43.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.43.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.44.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.44.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.45.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.45.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.46.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.46.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.47.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.47.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.48.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.48.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.49.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.49.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.5.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.50.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.50.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.51.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.51.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.54.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.54.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.55.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.55.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.56.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.56.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.57.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.57.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.58.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.58.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.59.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.59.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.6.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.6.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.60.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.60.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.61.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.61.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.62.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.62.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.63.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.63.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.64.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.64.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.65.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.65.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.66.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.66.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.67.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.67.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.68.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.68.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.69.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.69.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.7.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.7.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.70.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.70.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.71.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.71.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.72.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.72.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.73.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.73.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.74.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.74.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.75.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.75.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.76.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.76.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.77.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.77.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.78.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.78.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.79.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.79.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.8.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.80.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.80.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.81.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.81.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.82.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.82.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.83.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.83.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.84.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.84.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.85.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.85.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.86.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.86.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.87.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.87.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.88.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.88.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.89.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.89.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.9.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.9.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.90.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.90.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.91.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.91.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.92.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.92.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.93.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.93.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.94.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.94.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.95.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.95.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.96.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.96.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.97.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.97.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.98.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.98.woff2 -------------------------------------------------------------------------------- /public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.99.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/fonts/dela-gothic-one/hESp6XxvMDRA-2eD0lXpDa6QkBAGQEsPQAgBRQGhdlWTf4ifQMmxfTPxmI8D_A6A.99.woff2 -------------------------------------------------------------------------------- /public/illustration/email-heart.svg: -------------------------------------------------------------------------------- 1 | 8 | 9 | 13 | 17 | 21 | 25 | 29 | 33 | 37 | 41 | 45 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /public/illustration/paper-plane.svg: -------------------------------------------------------------------------------- 1 | 8 | 9 | 13 | 17 | 21 | 25 | 29 | 33 | 37 | 41 | 45 | 49 | 53 | 57 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /public/images/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/images/facebook.png -------------------------------------------------------------------------------- /public/images/logo-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/images/logo-128.png -------------------------------------------------------------------------------- /public/images/logo-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/images/logo-512.png -------------------------------------------------------------------------------- /public/images/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monodyle/codeleak/af6cb65c315c4a86d34d00589120547ad32afd7a/public/images/og-image.png -------------------------------------------------------------------------------- /public/loading.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 21 | 31 | 32 | 33 | 43 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} -------------------------------------------------------------------------------- /src/components/button.tsx: -------------------------------------------------------------------------------- 1 | import { ButtonHTMLAttributes } from 'react' 2 | 3 | type ButtonVariant = 'normal' | 'small' 4 | 5 | interface Props extends ButtonHTMLAttributes { 6 | variant?: ButtonVariant 7 | } 8 | 9 | const Button = (props: Props) => { 10 | const { className, variant = 'normal', ...rest } = props 11 | 12 | const styles: { [K in ButtonVariant as string]: string[] } = { 13 | normal: [ 14 | 'bg-purple-500 border border-gray-500', 15 | 'rounded-md leading-9 px-4', 16 | 'font-medium text-white', 17 | // hover 18 | 'hover:bg-purple-600', 19 | // focus 20 | 'focus:bg-purple-600', 21 | // disabled 22 | 'disabled:bg-purple-300 disabled:border-purple-400 disabled:cursor-not-allowed', 23 | ], 24 | small: [ 25 | 'flex items-center text-xs text-purple-700 font-medium', 26 | 'px-2 py-1 bg-purple-100 rounded ', 27 | // hover 28 | 'hover:bg-purple-200', 29 | // focus 30 | 'focus:bg-purple-200 focus:ring focus:ring-purple-400 focus:ring-offset-2 focus:outline-none', 31 | // 32 | 'target:bg-purple-300', 33 | ], 34 | } 35 | 36 | return ( 37 | 37 | )} 38 |
39 | 40 | Report bugs 41 | 42 |
43 | 44 | 45 | ) 46 | } 47 | -------------------------------------------------------------------------------- /src/components/layout/header.tsx: -------------------------------------------------------------------------------- 1 | import { CONFIG } from 'constants/config.const' 2 | import { pages } from 'constants/url.const' 3 | import Link from 'next/link' 4 | 5 | export const Header = () => { 6 | return ( 7 |
8 | 9 | 10 |

11 | {CONFIG.title} 12 |

13 |
14 | 15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/components/layout/layout.tsx: -------------------------------------------------------------------------------- 1 | import { CONFIG } from 'constants/config.const' 2 | import { Fragment } from 'react' 3 | import { Footer, Header, SEO } from '../' 4 | 5 | interface Props { 6 | title?: string 7 | flex?: boolean 8 | } 9 | 10 | const Layout: React.FC = (props) => { 11 | return ( 12 | 13 | 14 |
15 |
16 |
19 | {props.children} 20 |
21 |
22 |
23 |
24 | ) 25 | } 26 | 27 | export { Layout } 28 | -------------------------------------------------------------------------------- /src/components/partials/error.tsx: -------------------------------------------------------------------------------- 1 | interface Props { 2 | children: any 3 | } 4 | 5 | export const Error = ({ children }: Props) => { 6 | return ( 7 |
8 |

9 | Error 10 |

11 | {typeof children === 'object' ? JSON.stringify(children) : children} 12 |
13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /src/components/partials/explain.tsx: -------------------------------------------------------------------------------- 1 | import { EXAMPLE_CODE, LINKS } from 'constants/config.const' 2 | 3 | const Paragraph: React.FC<{}> = ({ children }) => ( 4 |

{children}

5 | ) 6 | 7 | export const Explain = () => { 8 | return ( 9 |
10 |

What is this?

11 | 12 | This is a service that save your link as a code and share with others, 13 | then they can paste it back to decode. Everything in a few clicks. 14 | 15 | 16 | Let's take an example, decode this code:{' '} 17 | 18 | {EXAMPLE_CODE} 19 | 20 | 21 | 22 | Feel free to use. If you enjoy, you can{' '} 23 | 24 | buy me a coffee 25 | 26 | . 27 | 28 |
29 | ) 30 | } 31 | -------------------------------------------------------------------------------- /src/components/partials/result.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from 'components/button' 2 | import { CopyIcon } from 'components/icons' 3 | import copy from 'copy-to-clipboard' 4 | import { useEffect, useState } from 'react' 5 | import { isURL } from 'utils/validator' 6 | 7 | interface Props { 8 | children: string 9 | } 10 | 11 | const Result = ({ children }: Props) => { 12 | const [copied, setCopied] = useState(false) 13 | 14 | useEffect(() => { 15 | const timer = setTimeout(() => { 16 | if (copied) setCopied(false) 17 | }, 3000) 18 | return () => clearTimeout(timer) 19 | }, [copied]) 20 | 21 | return ( 22 |
23 | 34 |

35 | Here you are 36 |

37 |

38 | {isURL(children) ? ( 39 | 45 | {children} 46 | 47 | ) : ( 48 | children 49 | )} 50 |

51 |
52 | ) 53 | } 54 | 55 | export { Result } 56 | -------------------------------------------------------------------------------- /src/components/partials/saved-item.tsx: -------------------------------------------------------------------------------- 1 | import { CheckIcon, CopyIcon, ExternalLinkIcon } from 'components/icons' 2 | import copy from 'copy-to-clipboard' 3 | import { useEffect, useState } from 'react' 4 | import { dateFormat } from 'utils/formatter' 5 | 6 | interface Props { 7 | code: string 8 | url: string 9 | created_at: string 10 | } 11 | 12 | export const SavedItem = (props: Props) => { 13 | const { code, url, created_at } = props 14 | const [copied, setCopied] = useState(false) 15 | 16 | useEffect(() => { 17 | const timer = setTimeout(() => { 18 | if (copied) setCopied(false) 19 | }, 3000) 20 | return () => clearTimeout(timer) 21 | }, [copied]) 22 | 23 | return ( 24 |
25 |
26 |
Code
27 |
28 |

{code}

29 |
30 | 44 |
45 |
46 |
47 |
URL
48 | 59 |
60 |

61 | Created at {dateFormat(created_at)} 62 |

63 |
64 | ) 65 | } 66 | -------------------------------------------------------------------------------- /src/components/partials/user-status.tsx: -------------------------------------------------------------------------------- 1 | import { pages } from 'constants/url.const' 2 | import { useAtom } from 'jotai' 3 | import Link from 'next/link' 4 | import { Fragment } from 'react' 5 | import { userAtom } from 'stores/auth.store' 6 | 7 | export const UserStatus = () => { 8 | const [user] = useAtom(userAtom) 9 | 10 | return ( 11 |
12 | {user ? ( 13 | 14 | Hello{' '} 15 | 16 | {user.email} 17 | 18 | , wanna get some fun?! 19 | 20 | ) : ( 21 | 22 | Hello anon, did you know{' '} 23 | 24 | sign in 25 | {' '} 26 | can save your sharing? 27 | 28 | )} 29 |
30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/components/seo.tsx: -------------------------------------------------------------------------------- 1 | import { CONFIG } from 'constants/config.const' 2 | import Head from 'next/head' 3 | 4 | interface Props { 5 | title?: string 6 | description?: string 7 | image?: string 8 | slug?: string 9 | } 10 | 11 | const SEO = ({ 12 | title = CONFIG.title, 13 | description = CONFIG.description, 14 | image = CONFIG.image, 15 | slug = '/', 16 | }: Props) => { 17 | const url = `${CONFIG.url}${slug}` 18 | const previewImage = `${CONFIG.url}${image}` 19 | return ( 20 | 21 | {/* General tags */} 22 | {title} 23 | 24 | 25 | 26 | 27 | {/* OpenGraph tags */} 28 | 29 | 30 | 31 | 36 | 37 | 38 | {/* Twitter Card tags */} 39 | 44 | 49 | 50 | 55 | 56 | 57 | ) 58 | } 59 | 60 | export { SEO } 61 | -------------------------------------------------------------------------------- /src/constants/config.const.ts: -------------------------------------------------------------------------------- 1 | export const CONFIG = { 2 | url: 'https://codeleak.me', 3 | title: 'CodeLeak', 4 | author: 'Monody Le', 5 | description: 'Share link like an anon!', 6 | image: '/images/og-image.png', 7 | colors: { 8 | theme: '#FFFFFF', 9 | title: '#8b5cf6', 10 | }, 11 | } as const 12 | 13 | export const LINKS = { 14 | donate: 'https://ko-fi.com/monodyle', 15 | github: 'https://github.com/monodyle', 16 | report: 'https://github.com/monodyle/share-code/issues/new', 17 | } as const 18 | 19 | export const EXAMPLE_CODE = 'XXXXXXXX' 20 | -------------------------------------------------------------------------------- /src/constants/interface.const.ts: -------------------------------------------------------------------------------- 1 | import { UserInputType } from 'utils/input' 2 | 3 | export interface Payload { 4 | type: UserInputType 5 | input: string 6 | user_id?: string 7 | } 8 | 9 | export interface APIResponse { 10 | result: T | null 11 | error: unknown 12 | } 13 | 14 | export interface DataResult { 15 | code?: string 16 | url: string 17 | created_at: string 18 | created_by?: string 19 | } 20 | -------------------------------------------------------------------------------- /src/constants/url.const.ts: -------------------------------------------------------------------------------- 1 | import { CONFIG } from './config.const' 2 | 3 | export const pages = { 4 | home: { 5 | title: CONFIG.title, 6 | path: '/', 7 | }, 8 | login: { 9 | title: 'Sign in', 10 | path: '/login', 11 | }, 12 | saved: { 13 | title: 'Your saved', 14 | path: '/saved', 15 | }, 16 | } 17 | 18 | export const api = { 19 | shhh: '/api/shhh', 20 | saved: (user_id: string) => `/api/saved?user_id=${user_id}`, 21 | } 22 | -------------------------------------------------------------------------------- /src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import type { AppProps } from 'next/app' 2 | import { StrictMode } from 'react' 3 | import { Auth, SEO } from 'components' 4 | import 'styles/global.css' 5 | 6 | export default function App({ Component, pageProps }: AppProps) { 7 | return ( 8 | 9 | 10 | 11 | 12 | 13 | 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /src/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { CONFIG } from 'constants/config.const' 2 | import Document, { Head, Html, Main, NextScript } from 'next/document' 3 | 4 | class MyDocument extends Document { 5 | render(): JSX.Element { 6 | return ( 7 | 8 | 9 | 14 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 | 35 | 36 | 37 | ) 38 | } 39 | } 40 | 41 | export default MyDocument 42 | -------------------------------------------------------------------------------- /src/pages/api/saved.ts: -------------------------------------------------------------------------------- 1 | import Cors from 'cors' 2 | import { NextApiRequest, NextApiResponse } from 'next' 3 | import { initMiddleware } from 'utils/middleware' 4 | import { supabase } from 'utils/supabase' 5 | 6 | const cors = initMiddleware(Cors({ methods: ['GET', 'OPTIONS'] })) 7 | 8 | const SavedAPI = async (req: NextApiRequest, res: NextApiResponse) => { 9 | await cors(req, res) 10 | if (req.method !== 'GET') 11 | return res.status(400).send({ error: 'Invalid method' }) 12 | 13 | const { user_id } = req.query 14 | 15 | if (user_id == undefined || typeof user_id !== 'string') 16 | return res.status(400).json({ error: 'Invalid user_id' }) 17 | 18 | const { data, error } = await supabase 19 | .from('links') 20 | .select('code, url, created_at') 21 | .eq('created_by', user_id) 22 | .order('created_at', { ascending: false }) 23 | 24 | if (error) return res.status(400).json({ error }) 25 | return res.status(200).json({ result: data }) 26 | } 27 | 28 | export default SavedAPI 29 | -------------------------------------------------------------------------------- /src/pages/api/shhh.ts: -------------------------------------------------------------------------------- 1 | import Cors from 'cors' 2 | import { NextApiRequest, NextApiResponse } from 'next' 3 | import { randomIdGenerator } from 'utils/generator' 4 | import { initMiddleware } from 'utils/middleware' 5 | import { supabase } from 'utils/supabase' 6 | import { isURL } from 'utils/validator' 7 | 8 | const cors = initMiddleware(Cors({ methods: ['POST', 'OPTIONS'] })) 9 | 10 | const ShhhAPI = async (req: NextApiRequest, res: NextApiResponse) => { 11 | await cors(req, res) 12 | if (req.method !== 'POST') 13 | return res.status(400).send({ error: 'Invalid method' }) 14 | 15 | const { type, input, user_id } = JSON.parse(JSON.parse(req.body).body) 16 | 17 | if (user_id && typeof user_id !== 'string') 18 | return res.status(400).json({ error: 'Invalid user' }) 19 | 20 | if (type !== 'code' && type !== 'url') 21 | return res.status(400).json({ error: 'Invalid type' }) 22 | 23 | if (input === undefined || (input && typeof input !== 'string')) 24 | return res.status(400).json({ error: 'Invalid input' }) 25 | 26 | if (type === 'code' && input.length !== 8) 27 | return res.status(400).json({ error: 'Invalid input length' }) 28 | 29 | if (type === 'url' && isURL(input) === false) 30 | return res.status(400).json({ error: 'Invalid url input' }) 31 | 32 | if (type === 'code') { 33 | const { data, error } = await supabase 34 | .from('links') 35 | .select('url, created_at') 36 | .eq('code', input) 37 | if (error) return res.status(400).json({ error }) 38 | return res.status(200).json({ result: data?.[0] || null }) 39 | } 40 | 41 | if (type === 'url') { 42 | let code = '' 43 | for (;;) { 44 | const newCode = randomIdGenerator() 45 | const { data, error } = await supabase 46 | .from('links') 47 | .select('url, created_at') 48 | .eq('code', newCode) 49 | if (error) return res.status(400).json({ error }) 50 | if (data === null || data.length === 0) { 51 | code = newCode 52 | break 53 | } 54 | } 55 | const { data, error } = await supabase 56 | .from('links') 57 | .insert([{ code, url: input, created_by: user_id }]) 58 | if (error) return res.status(400).json({ error }) 59 | return res.status(200).json({ result: data?.[0] }) 60 | } 61 | 62 | return res.status(200).json({ result: '' }) 63 | } 64 | 65 | export default ShhhAPI 66 | -------------------------------------------------------------------------------- /src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Button, 3 | Error, 4 | Explain, 5 | Input, 6 | Layout, 7 | Result, 8 | UserStatus, 9 | } from 'components' 10 | import { DataResult, Payload } from 'constants/interface.const' 11 | import { api } from 'constants/url.const' 12 | import { useAtom } from 'jotai' 13 | import { useCallback, useEffect, useState } from 'react' 14 | import { userAtom } from 'stores/auth.store' 15 | import { loadingAtom } from 'stores/loading.store' 16 | import { fetcher } from 'utils/fetcher' 17 | import { detector, getButtonLabel, UserInputType } from 'utils/input' 18 | 19 | const IndexPage = () => { 20 | const [loading, setLoading] = useAtom(loadingAtom) 21 | const [result, setResult] = useState(null) 22 | const [error, setError] = useState(null) 23 | const [input, setInput] = useState('') 24 | const [type, setType] = useState(false) 25 | const [user] = useAtom(userAtom) 26 | 27 | const handleInput = useCallback(async () => { 28 | if (input.trim() === '') return 29 | try { 30 | setResult(null) 31 | setError(null) 32 | setLoading(true) 33 | const payload: Payload = { 34 | type, 35 | input, 36 | } 37 | if (user?.id) payload.user_id = user.id 38 | const { error, result } = await fetcher.post(api.shhh, { 39 | method: 'POST', 40 | body: JSON.stringify(payload), 41 | }) 42 | if (error) return setError(error) 43 | if (result) return setResult(result) 44 | setResult('Oops! We cant look up anything, please check again.') 45 | } catch (e) { 46 | console.error(e) 47 | } finally { 48 | setLoading(false) 49 | } 50 | }, [input, setLoading, type, user?.id]) 51 | 52 | const handleEnterKey = (event: React.KeyboardEvent) => { 53 | if (event.key === 'Enter') handleInput() 54 | } 55 | 56 | useEffect(() => { 57 | setType(detector(input)) 58 | }, [input]) 59 | 60 | return ( 61 | 62 |
63 | 64 |
65 |
66 | setInput(e.target.value)} 71 | onKeyPress={(e) => handleEnterKey(e)} 72 | /> 73 |
74 | 80 |
81 |
82 | {result !== null && 83 | (typeof result === 'string' ? ( 84 |

{result}

85 | ) : ( 86 | {result.code || result.url} 87 | ))} 88 | {error !== null && {error}} 89 |
90 | 91 | 92 | ) 93 | } 94 | 95 | export default IndexPage 96 | -------------------------------------------------------------------------------- /src/pages/login.tsx: -------------------------------------------------------------------------------- 1 | import { Button, Input, Layout } from 'components' 2 | import { CONFIG } from 'constants/config.const' 3 | import { pages } from 'constants/url.const' 4 | import { useAtom } from 'jotai' 5 | import Image from 'next/image' 6 | import { useRouter } from 'next/router' 7 | import { Fragment, useEffect, useState } from 'react' 8 | import { loadingAtom } from 'stores/loading.store' 9 | import { supabase } from 'utils/supabase' 10 | import { isEmail } from 'utils/validator' 11 | 12 | const LoginPage = () => { 13 | const [loading, setLoading] = useAtom(loadingAtom) 14 | const [sent, setSent] = useState(false) 15 | const [email, setEmail] = useState('') 16 | 17 | const router = useRouter() 18 | useEffect(() => { 19 | const session = supabase.auth.session() 20 | if (session !== null) router.push(pages.home.path) 21 | }, [router]) 22 | 23 | const sendLogin = async () => { 24 | try { 25 | setLoading(true) 26 | setSent(false) 27 | const { error } = await supabase.auth.signIn({ email }) 28 | if (error) throw error 29 | setSent(true) 30 | } catch (error) { 31 | console.error(error) 32 | } finally { 33 | setLoading(false) 34 | } 35 | } 36 | 37 | return ( 38 | 39 |
40 |
41 | Email 47 |
48 | {sent ? ( 49 | 50 |

51 | An email is on its way! 52 |

53 |

54 | We sent an email to {email}.
55 | You can fin a magic link that will sign you into {CONFIG.title}. 56 |

57 |
58 | ) : ( 59 | 60 |

61 | Welcome, always ready for sharing. 62 |

63 |
64 | setEmail(e.target.value)} 70 | /> 71 |
72 | 79 |
80 | {/*
81 | */} 98 |
99 | {loading && ( 100 |
Wait a minute...
101 | )} 102 | 103 | )} 104 |
105 |
106 | 107 | ) 108 | } 109 | 110 | export default LoginPage 111 | -------------------------------------------------------------------------------- /src/pages/saved.tsx: -------------------------------------------------------------------------------- 1 | import { Session } from '@supabase/supabase-js' 2 | import { Button, Layout, SavedItem } from 'components' 3 | import { ArrowDownIcon, ArrowUpIcon } from 'components/icons' 4 | import { DataResult } from 'constants/interface.const' 5 | import { api, pages } from 'constants/url.const' 6 | import { useAtom } from 'jotai' 7 | import Link from 'next/link' 8 | import { useRouter } from 'next/router' 9 | import { Fragment, useEffect, useMemo, useState } from 'react' 10 | import { userAtom } from 'stores/auth.store' 11 | import { loadingAtom } from 'stores/loading.store' 12 | import { fetcher } from 'utils/fetcher' 13 | import { supabase } from 'utils/supabase' 14 | 15 | const SavedPage = () => { 16 | const [, setLoading] = useAtom(loadingAtom) 17 | const [user] = useAtom(userAtom) 18 | const [session, setSession] = useState(null) 19 | const [data, setData] = useState(null) 20 | const [ascending, setAscending] = useState(false) 21 | const items = useMemo( 22 | () => (data && ascending ? data.slice().reverse() : data), 23 | [ascending, data], 24 | ) 25 | 26 | const router = useRouter() 27 | useEffect(() => { 28 | const session = supabase.auth.session() 29 | if (session === null) { 30 | router.push(pages.login.path) 31 | return 32 | } 33 | setSession(session) 34 | }, [router]) 35 | 36 | useEffect(() => { 37 | async function fetchData() { 38 | if (!user?.id) return 39 | try { 40 | setLoading(true) 41 | const { error, result } = await fetcher.get( 42 | api.saved(user.id), 43 | ) 44 | if (error) return console.error(error) 45 | setData(result) 46 | } catch (error) { 47 | console.error(error) 48 | } finally { 49 | setLoading(false) 50 | } 51 | } 52 | fetchData() 53 | }, [setLoading, user?.id]) 54 | 55 | return session ? ( 56 | 57 |
58 |
59 |

60 | {pages.saved.title} 61 |

62 | 75 |
76 |
77 | {items && items.length ? ( 78 | items.map((item, key) => ( 79 | 80 | 85 |
86 | 87 | )) 88 | ) : ( 89 |
90 | Nothing here, 91 |
92 | Start your{' '} 93 | 94 | sharing now 95 | 96 | ! 97 |
98 | )} 99 | 100 | ) : null 101 | } 102 | 103 | export default SavedPage 104 | -------------------------------------------------------------------------------- /src/stores/auth.store.ts: -------------------------------------------------------------------------------- 1 | import { Session, User } from '@supabase/gotrue-js' 2 | import { atom } from 'jotai' 3 | 4 | export const sessionAtom = atom(null) 5 | export const userAtom = atom(null) 6 | -------------------------------------------------------------------------------- /src/stores/loading.store.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'jotai' 2 | 3 | export const loadingAtom = atom(false) 4 | -------------------------------------------------------------------------------- /src/styles/global.css: -------------------------------------------------------------------------------- 1 | @import url('fonts.css'); 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | 7 | *, 8 | *::before, 9 | *::after { 10 | box-sizing: border-box; 11 | } 12 | 13 | .body { 14 | @apply text-gray-800 bg-gray-50; 15 | } 16 | 17 | a { 18 | display: inline-block; 19 | border-bottom: 1px dashed; 20 | } 21 | 22 | a:hover { 23 | color: theme('colors.purple.500'); 24 | } 25 | -------------------------------------------------------------------------------- /src/utils/fetcher.ts: -------------------------------------------------------------------------------- 1 | import { APIResponse } from 'constants/interface.const' 2 | 3 | const get = async (url: string, options = {}): Promise> => { 4 | try { 5 | const response = await fetch(url, { 6 | ...options, 7 | }) 8 | return response.json() 9 | } catch (error) { 10 | return { error, result: null } 11 | } 12 | } 13 | 14 | const post = async ( 15 | url: string, 16 | data: any, 17 | options = {}, 18 | ): Promise> => { 19 | try { 20 | const response = await fetch(url, { 21 | ...options, 22 | method: 'POST', 23 | body: JSON.stringify(data), 24 | }) 25 | return response.json() 26 | } catch (error) { 27 | return { error, result: null } 28 | } 29 | } 30 | 31 | export const fetcher = { 32 | get, 33 | post, 34 | } 35 | -------------------------------------------------------------------------------- /src/utils/formatter.ts: -------------------------------------------------------------------------------- 1 | export const dateFormat = (date: number | Date | string) => 2 | new Intl.DateTimeFormat('en-US').format(new Date(date)) 3 | -------------------------------------------------------------------------------- /src/utils/generator.ts: -------------------------------------------------------------------------------- 1 | export const randomIdGenerator = () => 2 | Math.random().toString(36).substr(2, 8).toUpperCase() 3 | -------------------------------------------------------------------------------- /src/utils/input.ts: -------------------------------------------------------------------------------- 1 | import { isURL } from './validator' 2 | 3 | export type UserInputType = false | 'code' | 'url' 4 | 5 | const detector = (input: string): UserInputType => { 6 | if (input.length === 8) return 'code' 7 | if (isURL(input)) return 'url' 8 | return false 9 | } 10 | 11 | const getButtonLabel = (type: UserInputType) => { 12 | switch (type) { 13 | case 'code': 14 | return 'Reveal' 15 | case 'url': 16 | return 'Share' 17 | default: 18 | return 'Hm...' 19 | } 20 | } 21 | 22 | export { detector, getButtonLabel } 23 | -------------------------------------------------------------------------------- /src/utils/middleware.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next' 2 | 3 | export const initMiddleware = (middleware: Function) => { 4 | return (req: NextApiRequest, res: NextApiResponse) => 5 | new Promise((resolve, reject) => { 6 | middleware(req, res, (result: unknown) => { 7 | if (result instanceof Error) { 8 | return reject(result) 9 | } 10 | return resolve(result) 11 | }) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /src/utils/supabase.ts: -------------------------------------------------------------------------------- 1 | import { createClient } from '@supabase/supabase-js' 2 | 3 | const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL 4 | const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY 5 | 6 | if ( 7 | typeof supabaseUrl === 'undefined' || 8 | supabaseUrl === '' || 9 | typeof supabaseAnonKey === 'undefined' || 10 | supabaseAnonKey === '' 11 | ) { 12 | throw Error('Missing env `SUPABASE_URL` or `SUPABASE_ANON_KEY`') 13 | } 14 | 15 | export const supabase = createClient(supabaseUrl, supabaseAnonKey) 16 | -------------------------------------------------------------------------------- /src/utils/validator.ts: -------------------------------------------------------------------------------- 1 | const patterns = { 2 | email: 3 | /^[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/, 4 | url: /^(https?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/, 5 | } 6 | 7 | export const isEmail = (email: string): boolean => { 8 | if (!email) return false 9 | 10 | const [account, address] = email.split('@') 11 | if (!account || !address) return false 12 | if (account.length > 64) return false 13 | if (address.length > 255) return false 14 | 15 | const parts = address.split('.') 16 | if (parts.some((part) => part.length > 63)) return false 17 | 18 | return patterns.email.test(email) 19 | } 20 | 21 | export const isURL = (url: string): boolean => { 22 | if (!url) return false 23 | try { 24 | new URL(url) 25 | return patterns.url.test(url) 26 | } catch (_) { 27 | return false 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ['./src/**/*.{js,ts,jsx,tsx}'], 3 | darkMode: 'class', 4 | mode: 'jit', 5 | theme: { 6 | fontFamily: { 7 | mono: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace, monospace', 8 | serif: 'ui-serif, Georgia, Cambria, "Times New Roman", Times, serif', 9 | display: '"Dela Gothic One", sans-serif', 10 | sans: 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"', 11 | }, 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "baseUrl": "src" 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | --------------------------------------------------------------------------------