├── .env.example ├── .eslintrc.cjs ├── .gitignore ├── README.md ├── bun.lockb ├── next.config.js ├── package.json ├── postcss.config.cjs ├── prettier.config.js ├── public └── favicon.ico ├── src ├── app │ ├── layout.tsx │ ├── page.tsx │ └── providers.tsx ├── env.js └── styles │ └── globals.css ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | # Since the ".env" file is gitignored, you can use the ".env.example" file to 2 | # build a new ".env" file when you clone the repo. Keep this file up-to-date 3 | # when you add new variables to `.env`. 4 | 5 | # This file will be committed to version control, so make sure not to have any 6 | # secrets in it. If you are cloning this repo, create a copy of this file named 7 | # ".env" and populate it with your secrets. 8 | 9 | # When adding additional environment variables, the schema in "/src/env.js" 10 | # should be updated accordingly. 11 | 12 | # Example: 13 | # SERVERVAR="foo" 14 | # NEXT_PUBLIC_CLIENTVAR="bar" 15 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import("eslint").Linter.Config} */ 2 | const config = { 3 | parser: "@typescript-eslint/parser", 4 | parserOptions: { 5 | project: true, 6 | }, 7 | plugins: ["@typescript-eslint"], 8 | extends: [ 9 | "next/core-web-vitals", 10 | "plugin:@typescript-eslint/recommended-type-checked", 11 | "plugin:@typescript-eslint/stylistic-type-checked", 12 | ], 13 | rules: { 14 | // These opinionated rules are enabled in stylistic-type-checked above. 15 | // Feel free to reconfigure them to your own preference. 16 | "@typescript-eslint/array-type": "off", 17 | "@typescript-eslint/consistent-type-definitions": "off", 18 | 19 | "@typescript-eslint/consistent-type-imports": [ 20 | "warn", 21 | { 22 | prefer: "type-imports", 23 | fixStyle: "inline-type-imports", 24 | }, 25 | ], 26 | "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], 27 | "@typescript-eslint/require-await": "off", 28 | "@typescript-eslint/no-misused-promises": [ 29 | "error", 30 | { 31 | checksVoidReturn: { attributes: false }, 32 | }, 33 | ], 34 | }, 35 | }; 36 | 37 | module.exports = config; 38 | -------------------------------------------------------------------------------- /.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 | # database 12 | /prisma/db.sqlite 13 | /prisma/db.sqlite-journal 14 | 15 | # next.js 16 | /.next/ 17 | /out/ 18 | next-env.d.ts 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # local env files 34 | # do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables 35 | .env 36 | .env*.local 37 | 38 | # vercel 39 | .vercel 40 | 41 | # typescript 42 | *.tsbuildinfo 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hi 2 | 3 | Not accepting contributions (unless they're really good) 4 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/t3dotgg/darkmode-tax/a4cfc5ce2cfb3d40e6644d7175d231285d0c5792/bun.lockb -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful 3 | * for Docker builds. 4 | */ 5 | await import("./src/env.js"); 6 | 7 | import { withPlausibleProxy } from "next-plausible"; 8 | 9 | /** @type {import("next").NextConfig} */ 10 | const config = {}; 11 | 12 | export default withPlausibleProxy()(config); 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "darkmode-tax", 3 | "version": "0.1.0", 4 | "private": true, 5 | "type": "module", 6 | "scripts": { 7 | "build": "next build", 8 | "dev": "next dev", 9 | "lint": "next lint", 10 | "start": "next start" 11 | }, 12 | "dependencies": { 13 | "@t3-oss/env-nextjs": "^0.7.1", 14 | "next": "^14.0.4", 15 | "next-plausible": "^3.12.0", 16 | "react": "18.2.0", 17 | "react-dom": "18.2.0", 18 | "zod": "^3.22.4" 19 | }, 20 | "devDependencies": { 21 | "@types/eslint": "^8.44.7", 22 | "@types/node": "^18.17.0", 23 | "@types/react": "^18.2.37", 24 | "@types/react-dom": "^18.2.15", 25 | "@typescript-eslint/eslint-plugin": "^6.11.0", 26 | "@typescript-eslint/parser": "^6.11.0", 27 | "autoprefixer": "^10.4.14", 28 | "eslint": "^8.54.0", 29 | "eslint-config-next": "^14.0.4", 30 | "postcss": "^8.4.31", 31 | "prettier": "^3.1.0", 32 | "prettier-plugin-tailwindcss": "^0.5.7", 33 | "tailwindcss": "^3.3.5", 34 | "typescript": "^5.1.6" 35 | }, 36 | "ct3aMetadata": { 37 | "initVersion": "7.26.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | 8 | module.exports = config; 9 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').PluginOptions} */ 2 | const config = { 3 | plugins: ["prettier-plugin-tailwindcss"], 4 | }; 5 | 6 | export default config; 7 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/t3dotgg/darkmode-tax/a4cfc5ce2cfb3d40e6644d7175d231285d0c5792/public/favicon.ico -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import "~/styles/globals.css"; 2 | 3 | import { Open_Sans } from "next/font/google"; 4 | import Providers from "./providers"; 5 | 6 | const openSans = Open_Sans({ 7 | subsets: ["latin"], 8 | variable: "--font-sans", 9 | }); 10 | 11 | export const metadata = { 12 | title: "The Dark Mode Wall Of Shame", 13 | description: 14 | "A list of vendors that treat dark mode as a luxury feature, not a core security requirement.", 15 | icons: [{ rel: "icon", url: "/favicon.ico" }], 16 | }; 17 | 18 | export default function RootLayout({ 19 | children, 20 | }: { 21 | children: React.ReactNode; 22 | }) { 23 | return ( 24 | 25 |
26 |