Openstatus www.openstatus.dev

✏️ (#4)

* ✏️

* ✏️

authored by

Thibault Le Ouay and committed by
GitHub
a9df6d40 9f32b432

+251 -81
+35
apps/web/src/app/_components/hero-form.tsx
··· 1 + "use client"; 2 + import { toast } from "@/components/ui/use-toast"; 3 + import { addToWaitlist } from "../action"; 4 + import { Input } from "@/components/ui/input"; 5 + import { SubmitButton } from "./submit-button"; 6 + 7 + export const HeroForm = () => { 8 + return ( 9 + <form 10 + action={async (data) => { 11 + try { 12 + const number = await addToWaitlist(data); 13 + const formattedNumber = Intl.NumberFormat().format(number); 14 + toast({ 15 + description: `Thank you, you're number ${formattedNumber} on the list.`, 16 + }); 17 + } catch (e) { 18 + toast({ 19 + description: "Something went wrong", 20 + }); 21 + } 22 + }} 23 + className="flex gap-1.5" 24 + > 25 + <Input 26 + id="email" 27 + name="email" 28 + type="email" 29 + placeholder="me@domain.com" 30 + required 31 + /> 32 + <SubmitButton /> 33 + </form> 34 + ); 35 + };
+1 -1
apps/web/src/app/action.ts
··· 2 2 3 3 import { Resend } from "resend"; 4 4 import { Redis } from "@upstash/redis"; 5 + import { EmailTemplate } from "@/components/templates/email-template"; 5 6 import { env } from "@/env.mjs"; 6 7 7 8 const redis = Redis.fromEnv(); ··· 51 52 from: "onboarding@openstatus.dev", 52 53 to: "maximilian@kaske.org", 53 54 subject: "Hello world", 54 - // @ts-ignore FIXME: 55 55 react: EmailTemplate({ firstName: "John" }), 56 56 }); 57 57 };
-1
apps/web/src/app/api/send/route.ts
··· 13 13 from: "onboarding@openstatus.dev", 14 14 to: "maximilian@kaske.org", 15 15 subject: "Hello world", 16 - // @ts-ignore FIXME: 17 16 react: EmailTemplate({ firstName: "John" }), 18 17 }); 19 18
+16 -38
apps/web/src/app/page.tsx
··· 1 - "use client"; 2 - 3 1 import { Badge } from "@/components/ui/badge"; 4 - import { Input } from "@/components/ui/input"; 5 - import { addToWaitlist } from "./action"; 6 - import { SubmitButton } from "./_components/submit-button"; 7 - import { toast } from "@/components/ui/use-toast"; 2 + 3 + import { Metadata } from "next"; 4 + import { HeroForm } from "./_components/hero-form"; 5 + 6 + export const metadata: Metadata = { 7 + title: "Open-source monitoring service", 8 + description: 9 + "OpenStatus is an open source alternative to your current monitoring service with beautiful status page", 10 + }; 8 11 9 12 export default function Page() { 10 13 return ( 11 14 <main className="min-h-screen w-full flex flex-col p-4 md:p-8 space-y-6"> 12 15 <div className="flex-1 flex flex-col justify-center"> 13 16 <div className="mx-auto max-w-xl text-center"> 14 - <div className="rounded-lg border border-border backdrop-blur-[2px] p-8 md:p-16"> 17 + <div className="rounded-lg border border-border backdrop-blur-[2px] p-8"> 15 18 <Badge>Coming Soon</Badge> 16 - <h1 className="text-5xl text-foreground font-cal mb-6 mt-2"> 17 - OpenStatus 19 + <h1 className="text-3xl text-foreground font-cal mb-6 mt-2"> 20 + Open-source monitoring service 18 21 </h1> 19 - <p className="text-muted-foreground text-lg mb-4"> 20 - {"Let's"} build a Saas together. Open for everyone. <br /> 21 - Managed or self-hosted. Pay-as-you go or plans. <br /> 22 - Choose your solution. 22 + <p className="text-muted-foreground mb-4"> 23 + OpenStatus is an open source alternative to your current 24 + monitoring service with beautiful status page. 23 25 </p> 24 - <form 25 - action={async (data) => { 26 - try { 27 - const number = await addToWaitlist(data); 28 - const formattedNumber = Intl.NumberFormat().format(number); 29 - toast({ 30 - description: `Thank you, you're number ${formattedNumber} on the list.`, 31 - }); 32 - } catch (e) { 33 - toast({ 34 - description: "Something went wrong", 35 - }); 36 - } 37 - }} 38 - className="flex gap-1.5" 39 - > 40 - <Input 41 - id="email" 42 - name="email" 43 - type="email" 44 - placeholder="me@domain.com" 45 - required 46 - /> 47 - <SubmitButton /> 48 - </form> 26 + <HeroForm /> 49 27 </div> 50 28 </div> 51 29 </div>
+1 -3
apps/web/src/components/templates/email-template.tsx
··· 5 5 } 6 6 7 7 // TODO: rename and content 8 - export const EmailTemplate: React.FC<Readonly<EmailTemplateProps>> = ({ 9 - firstName, 10 - }) => ( 8 + export const EmailTemplate = ({ firstName }: EmailTemplateProps) => ( 11 9 <div> 12 10 <h1>Welcome, {firstName}!</h1> 13 11 </div>
+6 -6
apps/web/src/components/ui/input.tsx
··· 1 - import * as React from "react" 1 + import * as React from "react"; 2 2 3 - import { cn } from "@/lib/utils" 3 + import { cn } from "@/lib/utils"; 4 4 5 5 export interface InputProps 6 6 extends React.InputHTMLAttributes<HTMLInputElement> {} ··· 17 17 ref={ref} 18 18 {...props} 19 19 /> 20 - ) 20 + ); 21 21 } 22 - ) 23 - Input.displayName = "Input" 22 + ); 23 + Input.displayName = "Input"; 24 24 25 - export { Input } 25 + export { Input };
+8 -1
packages/eslint-config-custom/index.js
··· 1 1 module.exports = { 2 - extends: ["next", "turbo", "prettier"], 2 + extends: [ 3 + "next", 4 + "turbo", 5 + "eslint:recommended", 6 + "plugin:@typescript-eslint/recommended", 7 + "prettier", 8 + ], 3 9 rules: { 4 10 "@next/next/no-html-link-for-pages": "off", 11 + "@typescript-eslint/no-empty-interface": "warn", 5 12 }, 6 13 parserOptions: { 7 14 babelOptions: {
+8
packages/eslint-config-custom/package.json
··· 4 4 "main": "index.js", 5 5 "license": "MIT", 6 6 "dependencies": { 7 + "@next/eslint-plugin-next": "13.4.4", 8 + "@types/eslint": "8.40.0", 9 + "@typescript-eslint/eslint-plugin": "5.59.7", 10 + "@typescript-eslint/parser": "5.59.7", 7 11 "eslint-config-next": "13.4.6", 8 12 "eslint-config-prettier": "8.3.0", 9 13 "eslint-config-turbo": "1.10.3", 10 14 "eslint-plugin-react": "7.32.2" 15 + }, 16 + "devDependencies": { 17 + "eslint": "^8.42.0", 18 + "typescript": "5.1.3" 11 19 }, 12 20 "publishConfig": { 13 21 "access": "public"
+163 -30
pnpm-lock.yaml
··· 176 176 177 177 packages/eslint-config-custom: 178 178 dependencies: 179 + '@next/eslint-plugin-next': 180 + specifier: 13.4.4 181 + version: 13.4.4 182 + '@types/eslint': 183 + specifier: 8.40.0 184 + version: 8.40.0 185 + '@typescript-eslint/eslint-plugin': 186 + specifier: 5.59.7 187 + version: 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.43.0)(typescript@5.1.3) 188 + '@typescript-eslint/parser': 189 + specifier: 5.59.7 190 + version: 5.59.7(eslint@8.43.0)(typescript@5.1.3) 179 191 eslint-config-next: 180 192 specifier: 13.4.6 181 193 version: 13.4.6(eslint@8.43.0)(typescript@5.1.3) ··· 188 200 eslint-plugin-react: 189 201 specifier: 7.32.2 190 202 version: 7.32.2(eslint@8.43.0) 203 + devDependencies: 204 + eslint: 205 + specifier: ^8.42.0 206 + version: 8.43.0 207 + typescript: 208 + specifier: 5.1.3 209 + version: 5.1.3 191 210 192 211 packages/tsconfig: {} 193 212 ··· 416 435 417 436 /@next/env@13.4.6: 418 437 resolution: {integrity: sha512-nqUxEtvDqFhmV1/awSg0K2XHNwkftNaiUqCYO9e6+MYmqNObpKVl7OgMkGaQ2SZnFx5YqF0t60ZJTlyJIDAijg==} 438 + dev: false 439 + 440 + /@next/eslint-plugin-next@13.4.4: 441 + resolution: {integrity: sha512-5jnh7q6I15efnjR/rR+/TGTc9hn53g3JTbEjAMjmeQiExKqEUgIXqrHI5zlTNlNyzCPkBB860/ctxXheZaF2Vw==} 442 + dependencies: 443 + glob: 7.1.7 419 444 dev: false 420 445 421 446 /@next/eslint-plugin-next@13.4.6: ··· 946 971 '@types/node': 20.3.1 947 972 dev: false 948 973 974 + /@types/eslint@8.40.0: 975 + resolution: {integrity: sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==} 976 + dependencies: 977 + '@types/estree': 1.0.1 978 + '@types/json-schema': 7.0.12 979 + dev: false 980 + 981 + /@types/estree@1.0.1: 982 + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} 983 + dev: false 984 + 949 985 /@types/express-serve-static-core@4.17.35: 950 986 resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} 951 987 dependencies: ··· 977 1013 '@types/through': 0.0.30 978 1014 rxjs: 6.6.7 979 1015 dev: true 1016 + 1017 + /@types/json-schema@7.0.12: 1018 + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 1019 + dev: false 980 1020 981 1021 /@types/json5@0.0.29: 982 1022 resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} ··· 1038 1078 /@types/scheduler@0.16.3: 1039 1079 resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} 1040 1080 1081 + /@types/semver@7.5.0: 1082 + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 1083 + dev: false 1084 + 1041 1085 /@types/send@0.17.1: 1042 1086 resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} 1043 1087 dependencies: ··· 1058 1102 '@types/node': 20.3.1 1059 1103 dev: true 1060 1104 1061 - /@typescript-eslint/parser@5.59.11(eslint@8.43.0)(typescript@5.1.3): 1062 - resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} 1105 + /@typescript-eslint/eslint-plugin@5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.43.0)(typescript@5.1.3): 1106 + resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==} 1063 1107 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1064 1108 peerDependencies: 1109 + '@typescript-eslint/parser': ^5.0.0 1065 1110 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1066 1111 typescript: '*' 1067 1112 peerDependenciesMeta: 1068 1113 typescript: 1069 1114 optional: true 1070 1115 dependencies: 1071 - '@typescript-eslint/scope-manager': 5.59.11 1072 - '@typescript-eslint/types': 5.59.11 1073 - '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) 1116 + '@eslint-community/regexpp': 4.5.1 1117 + '@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 1118 + '@typescript-eslint/scope-manager': 5.59.7 1119 + '@typescript-eslint/type-utils': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 1120 + '@typescript-eslint/utils': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 1074 1121 debug: 4.3.4 1075 1122 eslint: 8.43.0 1123 + grapheme-splitter: 1.0.4 1124 + ignore: 5.2.4 1125 + natural-compare-lite: 1.4.0 1126 + semver: 7.5.2 1127 + tsutils: 3.21.0(typescript@5.1.3) 1076 1128 typescript: 5.1.3 1077 1129 transitivePeerDependencies: 1078 1130 - supports-color 1079 1131 dev: false 1080 1132 1081 - /@typescript-eslint/scope-manager@5.59.11: 1082 - resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} 1133 + /@typescript-eslint/parser@5.59.7(eslint@8.43.0)(typescript@5.1.3): 1134 + resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==} 1083 1135 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1136 + peerDependencies: 1137 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1138 + typescript: '*' 1139 + peerDependenciesMeta: 1140 + typescript: 1141 + optional: true 1084 1142 dependencies: 1085 - '@typescript-eslint/types': 5.59.11 1086 - '@typescript-eslint/visitor-keys': 5.59.11 1143 + '@typescript-eslint/scope-manager': 5.59.7 1144 + '@typescript-eslint/types': 5.59.7 1145 + '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.3) 1146 + debug: 4.3.4 1147 + eslint: 8.43.0 1148 + typescript: 5.1.3 1149 + transitivePeerDependencies: 1150 + - supports-color 1151 + dev: false 1152 + 1153 + /@typescript-eslint/scope-manager@5.59.7: 1154 + resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==} 1155 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1156 + dependencies: 1157 + '@typescript-eslint/types': 5.59.7 1158 + '@typescript-eslint/visitor-keys': 5.59.7 1159 + dev: false 1160 + 1161 + /@typescript-eslint/type-utils@5.59.7(eslint@8.43.0)(typescript@5.1.3): 1162 + resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==} 1163 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1164 + peerDependencies: 1165 + eslint: '*' 1166 + typescript: '*' 1167 + peerDependenciesMeta: 1168 + typescript: 1169 + optional: true 1170 + dependencies: 1171 + '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.3) 1172 + '@typescript-eslint/utils': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 1173 + debug: 4.3.4 1174 + eslint: 8.43.0 1175 + tsutils: 3.21.0(typescript@5.1.3) 1176 + typescript: 5.1.3 1177 + transitivePeerDependencies: 1178 + - supports-color 1087 1179 dev: false 1088 1180 1089 - /@typescript-eslint/types@5.59.11: 1090 - resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} 1181 + /@typescript-eslint/types@5.59.7: 1182 + resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==} 1091 1183 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1092 1184 dev: false 1093 1185 1094 - /@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.3): 1095 - resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} 1186 + /@typescript-eslint/typescript-estree@5.59.7(typescript@5.1.3): 1187 + resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==} 1096 1188 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1097 1189 peerDependencies: 1098 1190 typescript: '*' ··· 1100 1192 typescript: 1101 1193 optional: true 1102 1194 dependencies: 1103 - '@typescript-eslint/types': 5.59.11 1104 - '@typescript-eslint/visitor-keys': 5.59.11 1195 + '@typescript-eslint/types': 5.59.7 1196 + '@typescript-eslint/visitor-keys': 5.59.7 1105 1197 debug: 4.3.4 1106 1198 globby: 11.1.0 1107 1199 is-glob: 4.0.3 ··· 1112 1204 - supports-color 1113 1205 dev: false 1114 1206 1115 - /@typescript-eslint/visitor-keys@5.59.11: 1116 - resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} 1207 + /@typescript-eslint/utils@5.59.7(eslint@8.43.0)(typescript@5.1.3): 1208 + resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} 1117 1209 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1210 + peerDependencies: 1211 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1118 1212 dependencies: 1119 - '@typescript-eslint/types': 5.59.11 1213 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0) 1214 + '@types/json-schema': 7.0.12 1215 + '@types/semver': 7.5.0 1216 + '@typescript-eslint/scope-manager': 5.59.7 1217 + '@typescript-eslint/types': 5.59.7 1218 + '@typescript-eslint/typescript-estree': 5.59.7(typescript@5.1.3) 1219 + eslint: 8.43.0 1220 + eslint-scope: 5.1.1 1221 + semver: 7.5.2 1222 + transitivePeerDependencies: 1223 + - supports-color 1224 + - typescript 1225 + dev: false 1226 + 1227 + /@typescript-eslint/visitor-keys@5.59.7: 1228 + resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==} 1229 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1230 + dependencies: 1231 + '@typescript-eslint/types': 5.59.7 1120 1232 eslint-visitor-keys: 3.4.1 1121 1233 dev: false 1122 1234 ··· 2333 2445 dependencies: 2334 2446 '@next/eslint-plugin-next': 13.4.6 2335 2447 '@rushstack/eslint-patch': 1.3.2 2336 - '@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3) 2448 + '@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 2337 2449 eslint: 8.43.0 2338 2450 eslint-import-resolver-node: 0.3.7 2339 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0) 2340 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2451 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0) 2452 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2341 2453 eslint-plugin-jsx-a11y: 6.7.1(eslint@8.43.0) 2342 2454 eslint-plugin-react: 7.32.2(eslint@8.43.0) 2343 2455 eslint-plugin-react-hooks: 4.6.0(eslint@8.43.0) ··· 2375 2487 - supports-color 2376 2488 dev: false 2377 2489 2378 - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0): 2490 + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0): 2379 2491 resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} 2380 2492 engines: {node: ^14.18.0 || >=16.0.0} 2381 2493 peerDependencies: ··· 2385 2497 debug: 4.3.4 2386 2498 enhanced-resolve: 5.15.0 2387 2499 eslint: 8.43.0 2388 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2389 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2500 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2501 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2390 2502 get-tsconfig: 4.6.0 2391 2503 globby: 13.1.4 2392 2504 is-core-module: 2.12.1 ··· 2399 2511 - supports-color 2400 2512 dev: false 2401 2513 2402 - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0): 2514 + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0): 2403 2515 resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 2404 2516 engines: {node: '>=4'} 2405 2517 peerDependencies: ··· 2420 2532 eslint-import-resolver-webpack: 2421 2533 optional: true 2422 2534 dependencies: 2423 - '@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3) 2535 + '@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 2424 2536 debug: 3.2.7 2425 2537 eslint: 8.43.0 2426 2538 eslint-import-resolver-node: 0.3.7 2427 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0) 2539 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0) 2428 2540 transitivePeerDependencies: 2429 2541 - supports-color 2430 2542 dev: false 2431 2543 2432 - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0): 2544 + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0): 2433 2545 resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} 2434 2546 engines: {node: '>=4'} 2435 2547 peerDependencies: ··· 2439 2551 '@typescript-eslint/parser': 2440 2552 optional: true 2441 2553 dependencies: 2442 - '@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3) 2554 + '@typescript-eslint/parser': 5.59.7(eslint@8.43.0)(typescript@5.1.3) 2443 2555 array-includes: 3.1.6 2444 2556 array.prototype.flat: 1.3.1 2445 2557 array.prototype.flatmap: 1.3.1 ··· 2447 2559 doctrine: 2.1.0 2448 2560 eslint: 8.43.0 2449 2561 eslint-import-resolver-node: 0.3.7 2450 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2562 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0) 2451 2563 has: 1.0.3 2452 2564 is-core-module: 2.12.1 2453 2565 is-glob: 4.0.3 ··· 2528 2640 eslint: 8.43.0 2529 2641 dev: false 2530 2642 2643 + /eslint-scope@5.1.1: 2644 + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 2645 + engines: {node: '>=8.0.0'} 2646 + dependencies: 2647 + esrecurse: 4.3.0 2648 + estraverse: 4.3.0 2649 + dev: false 2650 + 2531 2651 /eslint-scope@7.2.0: 2532 2652 resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 2533 2653 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} ··· 2605 2725 engines: {node: '>=4.0'} 2606 2726 dependencies: 2607 2727 estraverse: 5.3.0 2728 + 2729 + /estraverse@4.3.0: 2730 + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 2731 + engines: {node: '>=4.0'} 2732 + dev: false 2608 2733 2609 2734 /estraverse@5.3.0: 2610 2735 resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} ··· 2950 3075 2951 3076 /graceful-fs@4.2.11: 2952 3077 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 3078 + 3079 + /grapheme-splitter@1.0.4: 3080 + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 3081 + dev: false 2953 3082 2954 3083 /graphemer@1.4.0: 2955 3084 resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} ··· 3667 3796 resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 3668 3797 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 3669 3798 hasBin: true 3799 + 3800 + /natural-compare-lite@1.4.0: 3801 + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 3802 + dev: false 3670 3803 3671 3804 /natural-compare@1.4.0: 3672 3805 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+13 -1
turbo.json
··· 4 4 "pipeline": { 5 5 "build": { 6 6 "dependsOn": ["^build"], 7 - "env": ["*", "RESEND_API_KEY", "!NEXT_PUBLIC_GIT_*"], 7 + "env": [ 8 + "*", 9 + "RESEND_API_KEY", 10 + "!NEXT_PUBLIC_GIT_*", 11 + "DATABASE_URL", 12 + "TINY_BIRD_API_KEY", 13 + "CLERK_SECRET_KEY", 14 + "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY", 15 + "NEXT_PUBLIC_CLERK_SIGN_IN_URL", 16 + "NEXT_PUBLIC_CLERK_SIGN_UP_URL", 17 + "NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL", 18 + "NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL" 19 + ], 8 20 "outputs": [".next/**", "!.next/cache/**"] 9 21 }, 10 22 "lint": {},