The recipes.blue monorepo recipes.blue
recipes appview atproto
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: working on getting it running again

+141 -58
+5 -5
apps/web/vite.config.ts
··· 1 1 import { defineConfig } from 'vite' 2 2 import react from '@vitejs/plugin-react-swc' 3 - import { TanStackRouterVite } from '@tanstack/router-plugin/vite' 3 + import { tanstackRouter } from '@tanstack/router-plugin/vite' 4 4 import path from 'path' 5 5 import metadata from "./public/client-metadata.json"; 6 6 ··· 10 10 // https://vite.dev/config/ 11 11 export default defineConfig({ 12 12 plugins: [ 13 - TanStackRouterVite(), 13 + tanstackRouter(), 14 14 react(), 15 15 16 16 { ··· 22 22 } else { 23 23 const redirectUri = ((): string => { 24 24 const url = new URL(metadata.redirect_uris[0]); 25 - return `http://${SERVER_HOST}:${SERVER_PORT}${url.pathname}`; 25 + return `https://local.recipes.blue${url.pathname}`; 26 26 })(); 27 27 28 28 const clientId = 29 - `http://localhost` + 29 + `https://local.recipes.blue` + 30 30 `?redirect_uri=${encodeURIComponent(redirectUri)}` + 31 31 `&scope=${encodeURIComponent(metadata.scope)}`; 32 32 ··· 41 41 }, 42 42 ], 43 43 server: { 44 - allowedHosts: ["flat-hundreds-negotiations-locale.trycloudflare.com"], 44 + allowedHosts: ["local.recipes.blue"], 45 45 host: SERVER_HOST, 46 46 port: SERVER_PORT, 47 47 },
+9 -51
config/dev/caddy/Caddyfile
··· 1 1 { 2 2 storage file_system /data/ 3 3 debug 4 - pki { 5 - ca recipesblue { 6 - name "Recipes.blue Local Development CA" 7 - } 8 - } 9 4 } 10 5 11 - api.local.recipes.blue { 12 - tls { 13 - issuer internal { 14 - ca recipesblue 15 - } 16 - } 6 + (tls_config) { 7 + tls /tls/dev.crt /tls/dev.key { 8 + ca_root /tls/ca.crt 9 + } 10 + } 17 11 12 + api.local.recipes.blue { 13 + import tls_config 18 14 reverse_proxy http://host.docker.internal:8080 19 15 } 20 16 21 17 local.recipes.blue { 22 - tls { 23 - issuer internal { 24 - ca recipesblue 25 - } 26 - } 27 - 28 - reverse_proxy http://host.docker.internal:5173 29 - 30 - handle_path /xrpc/* { 31 - rewrite * /xrpc{uri} 32 - reverse_proxy http://host.docker.internal:8080 33 - } 34 - handle_path /api/* { 35 - rewrite * /api{uri} 36 - reverse_proxy http://host.docker.internal:8080 37 - } 38 - } 39 - 40 - http://*.trycloudflare.com { 18 + import tls_config 41 19 reverse_proxy http://host.docker.internal:5173 42 20 43 21 handle_path /xrpc/* { 44 22 rewrite * /xrpc{uri} 45 23 reverse_proxy http://host.docker.internal:8080 46 24 } 47 - handle_path /oauth/* { 48 - rewrite * /oauth{uri} 49 - reverse_proxy http://host.docker.internal:8080 50 - } 51 25 handle_path /api/* { 52 26 rewrite * /api{uri} 53 27 reverse_proxy http://host.docker.internal:8080 54 28 } 55 29 } 56 30 57 - acme.local.recipes.blue { 58 - tls { 59 - issuer internal { 60 - ca recipesblue 61 - } 62 - } 63 - acme_server { 64 - ca recipesblue 65 - } 66 - } 67 - 68 31 turso.local.recipes.blue { 69 - tls { 70 - issuer internal { 71 - ca recipesblue 72 - } 73 - } 74 - 32 + import tls_config 75 33 reverse_proxy http://libsql:8080 76 34 }
+2 -1
config/dev/caddy/compose.yaml
··· 17 17 - "443:443" 18 18 - "443:443/udp" 19 19 volumes: 20 - - ./Caddyfile:/etc/caddy/Caddyfile 20 + - ./Caddyfile:/etc/caddy/Caddyfile:ro 21 + - ../pki:/tls:ro 21 22 - caddy_data:/data 22 23 - caddy_config:/config 23 24 extra_hosts:
+29
config/dev/pki/ca.crt
··· 1 + -----BEGIN CERTIFICATE----- 2 + MIIE/DCCA2SgAwIBAgIRALK0p95iJHmmXOWjMAS7T4swDQYJKoZIhvcNAQELBQAw 3 + gZUxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTE1MDMGA1UECwwsaGF5 4 + ZGVuQEhBWURFTi1XMTEubG9jYWxkb21haW4gKEhheWRlbiBZb3VuZykxPDA6BgNV 5 + BAMMM21rY2VydCBoYXlkZW5ASEFZREVOLVcxMS5sb2NhbGRvbWFpbiAoSGF5ZGVu 6 + IFlvdW5nKTAeFw0yNTExMjIyMjIyNTdaFw0zNTExMjIyMjIyNTdaMIGVMR4wHAYD 7 + VQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExNTAzBgNVBAsMLGhheWRlbkBIQVlE 8 + RU4tVzExLmxvY2FsZG9tYWluIChIYXlkZW4gWW91bmcpMTwwOgYDVQQDDDNta2Nl 9 + cnQgaGF5ZGVuQEhBWURFTi1XMTEubG9jYWxkb21haW4gKEhheWRlbiBZb3VuZykw 10 + ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCzcORfQsG3VWrZ8GnJZZhB 11 + FTtjV/A+LllaUlt2GIjAf9eBMIct7C4GoVfUSG8V5C3UMHMDpoZZCSJym2NyndOV 12 + CI1O/pr8sC4klVGetny/GxO443tn6z5Xz/BHsXSrE35igIO1p8S2xYctlXYq/cdE 13 + N5PsceQEg2p5K/EsBpcXEM1gMfUXB+v7nUhNx5AO+z+kZzSNkcmPYigwxq/pm3iM 14 + H8vYqhmZCT9zD7+FUFsBgbEf/bLU41xium21zdqzS7aoG2rypRoDvbaWbEvqZoJO 15 + 2VBnqBwI2aaMqCJ+Lc2VwLOYHNqu6iisTMzaNLbj2dr8Uvatem3yZvB+ACPzpQ8O 16 + zIQp5gjKZQ6nC2/1kvLIo9g5g2mCyG2hphadv/ubPmxaqe0w/PobngQFt5SbO2au 17 + mguvKFRa4FEm/Dy215+1Hil3owQkSGEREQMLS+t8TorBw7bgXUF8iSEiZS6JYabD 18 + yHYr8oBl/axDaAfCPkH4KGcjVf4vxOK255RbIBoCIksCAwEAAaNFMEMwDgYDVR0P 19 + AQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKfqTnO4509h 20 + 3YIiTC2EnnZYLG1fMA0GCSqGSIb3DQEBCwUAA4IBgQBSRKsZyGQoxcONbYrTVK82 21 + PAeOnYwlk27vPhhYbSTfgJRS5v3om9brccAVSPbZX4WXT5f/ibvLja0o7zU3RmxJ 22 + D5M4narw76fRXNzHjHfU6PRqDqLzJhPWM/V0IuQotU6kxEoNrfg9a1buB4lqldXr 23 + xqAarNM7kb0UXB/Wi1paKBk8o9CIvfoDP0kHoZHapBN6VWsJyPaTDfSH0roUfU+H 24 + jsm75nTXMI6h7eI5jo7FJcut1wbBpSiHdvmr4BX2SOGPHbSYCACirGExADKa4ULz 25 + AdhDBtBGEBtjzIKi9cLFTZY9bHFQsrwhegEDJwZs/ZH931q+f3ciE2og7qqE0drZ 26 + zZrmjY9QdOagSNRWw1089jG02333wtdgH+eJbYqVaKxB+vpBMUP72HEDS4WOh1E6 27 + nLNjqm6cZ4bW8I5gfsIDvcsmSGWdHaZLWvXcO20G2ySyfd/64L5+VHAs5rtbbzZr 28 + TR3BleuWVc5lMCAQtdoMAcy7UFPdUzSxHdrATc/Y/uQ= 29 + -----END CERTIFICATE-----
+40
config/dev/pki/ca.key
··· 1 + -----BEGIN PRIVATE KEY----- 2 + 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 39 + Z2CAgvzTduQVyoeY0sSM0dA= 40 + -----END PRIVATE KEY-----
+27
config/dev/pki/dev.crt
··· 1 + -----BEGIN CERTIFICATE----- 2 + MIIEfjCCAuagAwIBAgIRAMooUps4l++//kLhRuQXNKIwDQYJKoZIhvcNAQELBQAw 3 + gZUxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTE1MDMGA1UECwwsaGF5 4 + ZGVuQEhBWURFTi1XMTEubG9jYWxkb21haW4gKEhheWRlbiBZb3VuZykxPDA6BgNV 5 + BAMMM21rY2VydCBoYXlkZW5ASEFZREVOLVcxMS5sb2NhbGRvbWFpbiAoSGF5ZGVu 6 + IFlvdW5nKTAeFw0yNTExMjIyMjIzMThaFw0yODAyMjIyMjIzMThaMGAxJzAlBgNV 7 + BAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0aWZpY2F0ZTE1MDMGA1UECwwsaGF5 8 + ZGVuQEhBWURFTi1XMTEubG9jYWxkb21haW4gKEhheWRlbiBZb3VuZykwggEiMA0G 9 + CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSkRNRv4sBJbigX3Xiekg2eBk5ivz5 10 + tJ7VRPTYGCH2hqkyTvuiO44iX/CI0OKsDTxiCTzr2zaDQ6/bEAsK+NuIGUA7Lo81 11 + MWsGphiEfyHGK5j0oI8Rg5c9Vh7InXaoAdouJ8JTZlnjLbSEv3l1fLcY+BBNBfvK 12 + soF4KMhSyoXULsdnc5sTU1iXvhi0+330py7KYlW4KM1nb5ucQ7EYb/fWNmqmINTi 13 + 4agepceTvfV9/lkCGlwvAYUeYkiZsR2DM0j1zwiH7NVlitASjoUqP/IjzWqTd7xu 14 + NeDTyy0srJmu/CYG8GBi/w1lNSk0WPpT6R3i76/RmRZqU4sApJVbaWkFAgMBAAGj 15 + fTB7MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSME 16 + GDAWgBSn6k5zuOdPYd2CIkwthJ52WCxtXzAzBgNVHREELDAqghJsb2NhbC5yZWNp 17 + cGVzLmJsdWWCFCoubG9jYWwucmVjaXBlcy5ibHVlMA0GCSqGSIb3DQEBCwUAA4IB 18 + gQArUayVybiyLqKslyikxMjg0W0OR6Vl3BOzcHuv0+MQYiU4RXZEy9gB158fRq/A 19 + oYfGf0VMyP4GXCKDyJUfGiU/d1KQeu2skBK+SnZys6lV2pxtqnTxsJX18HI8bH3g 20 + jPjP8iQTGk4izkzhP/IMtSO88gVu5YZkQuU/W3uCJEwjsQTwKCx+VbTI0+2iiVw4 21 + 6S8f5dbjRG5cWzRuNOq8YAG42/2wPEhUzxJXsFlxrRXSOP1FlGcJy0QQm6TQ85+l 22 + D7sYHVKET2d181yWggT1KiKeGKm+pYkNgLKEHXAM0XGmlYAR01ibz2iotguYnz+z 23 + NgD+rHerqcdIaRLDPUmNYUCbDRpKozT/X6HK9qB3OtGMLFd5nd1S6mS6NisdzZCY 24 + s7WyCvnvMbExqpMnlX97UPcI0l0RUC/q/feQ+H2TqTD5QWszEvIO0JqEaREEgZ4p 25 + A0ZMksO4ZDsKMX2eqDLEv+Td9nb/7Kw+ydCjAMDLV11o31WBF0ucA/dV7sdgYFCj 26 + 1NM= 27 + -----END CERTIFICATE-----
+28
config/dev/pki/dev.key
··· 1 + -----BEGIN PRIVATE KEY----- 2 + MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDSkRNRv4sBJbig 3 + X3Xiekg2eBk5ivz5tJ7VRPTYGCH2hqkyTvuiO44iX/CI0OKsDTxiCTzr2zaDQ6/b 4 + EAsK+NuIGUA7Lo81MWsGphiEfyHGK5j0oI8Rg5c9Vh7InXaoAdouJ8JTZlnjLbSE 5 + v3l1fLcY+BBNBfvKsoF4KMhSyoXULsdnc5sTU1iXvhi0+330py7KYlW4KM1nb5uc 6 + Q7EYb/fWNmqmINTi4agepceTvfV9/lkCGlwvAYUeYkiZsR2DM0j1zwiH7NVlitAS 7 + joUqP/IjzWqTd7xuNeDTyy0srJmu/CYG8GBi/w1lNSk0WPpT6R3i76/RmRZqU4sA 8 + pJVbaWkFAgMBAAECggEAagiYO/BCpV9Da67mhBejyZoMycdNwMjNuwOwcCkm4SfK 9 + iATx/i4TUwgQ7jSSEKXRpGSWgwaumsc5BQ09IldS5WQhziuR/e1WwdBeREpozYwi 10 + x/0aTm1/eWmmsstodw4HunpXBvxhg17+qmJpXVpiMXapbr/2nYnqXIHc7qQBZGkH 11 + MnuDi6chGw0RBZhySLCHsyth5OHP16/SiV7Am6UaQyi4oG3W/RrVIRsIjoLPj0Hw 12 + MSPhiv/yq4TIWb4ujnGgNhIcEGJN6tYKWUEdoMjWQwvWZKw1c3G1glfUQGUeS7fH 13 + 0U4XTtPS43j7d5iQoff0gfZwV8wZvUAaRgxfgc7+eQKBgQDTeF48lHbw9lrrMu9P 14 + YfGiS90v9U25TpOq3qYUEPdwy9ssnTXPS/iJim/IW/B10F/AneqLWPWUawjaLxVF 15 + tAxMiruE3L4pJfYtbF7x3bWz879fMItlatWIKSwinEXu1NeQMDaTy7P5u+H37+7c 16 + nQm8KNtIVT29XYalK9pv5Hvg7wKBgQD+6ADj4LA25h0xTcjKBERStMPRESiFE1K7 17 + ITzp2jvOO68ZKgWSN+8bKpLKQYj40Aivi7Nu22cqlpcZ7/7uETXb6xjVrEfteg3S 18 + u7FUU9vuwX/0RCtbj8FlV1iaJXdq2XmnQLg2RESYFKc9vHaWdRJ/VCDkDCuNWns0 19 + IVjlY7OtSwKBgDF/fy9W4PBN+cILzhAasOB4OXG8TVEOn2nja6ROxFxWmxq6QZog 20 + AjDPgpK3UnWBLKh9TiUH0ZPH6e6IDsad+jMAVhwnPyuKgzDmqOKcLqfMagLx7e7z 21 + LsAMQxRm18ercjmBz4SQrbPK0n2iX5qr91dfiNRJf4YPmjCXLy35oTVpAoGBAJBT 22 + 5mUgTEXZRwAqjZysi87UYOcYMvweM8KWkDnMgf5EVuEFpP/kQbL9CP4R2y8eAzz5 23 + +Y+0FJbNiyJ5e7tp7Tfmxjn9gQBaEkeWVFJt5OIrl3pDutTt8U+jBBzLR/Esz6++ 24 + ek7nmnsNfp/6/J42DVIg3TqiFWrEp2ud0gqXyB0/AoGBAMj1p1uknmOoEoqfdJeI 25 + UqbWE//107MXTAhydpn/iuUKUVw9SiBpmdgA+YZ0ufuPyxy+Uoc25LrLrvA4O7aP 26 + hy4SJZ/7jq45AK6jPqzJo9FMjB32t5QyWkHlbvbasXA+5AHlriVjC58/EW60K/e3 27 + Pth8LTDiTKFjWFJWXYkGLtFa 28 + -----END PRIVATE KEY-----
+1 -1
libs/database/src/config.ts
··· 1 1 import { z } from "zod"; 2 2 3 3 const envSchema = z.object({ 4 - TURSO_CONNECTION_URL: z.string().default('https://turso.dev.hayden.moe'), 4 + TURSO_CONNECTION_URL: z.string().default('https://turso.local.recipes.blue'), 5 5 TURSO_AUTH_TOKEN: z.string().or(z.undefined()), 6 6 7 7 ENV: z