{"id":30619032,"url":"https://github.com/toweringcloud/remix-wemake-challenge","last_synced_at":"2026-05-16T09:34:31.359Z","repository":{"id":311461620,"uuid":"1043728002","full_name":"toweringcloud/remix-wemake-challenge","owner":"toweringcloud","description":"shop assistant fullstack web app using react v19 + react-router v7 framework + tailwindcss v4 + shadcn/ui + zustand + drizzle + postgresql","archived":false,"fork":false,"pushed_at":"2025-10-27T14:53:57.000Z","size":653,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-27T16:35:20.639Z","etag":null,"topics":["cloudflare","flyio","gemini","openai","resend","supabase","vercel"],"latest_commit_sha":null,"homepage":"https://remix-wemake-challenge.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/toweringcloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-24T13:50:17.000Z","updated_at":"2025-10-27T14:54:02.000Z","dependencies_parsed_at":"2025-08-24T20:31:37.862Z","dependency_job_id":"be4421d8-8a59-4f29-b01b-67b98c1d358b","html_url":"https://github.com/toweringcloud/remix-wemake-challenge","commit_stats":null,"previous_names":["toweringcloud/remix-wemake-challenge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/toweringcloud/remix-wemake-challenge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toweringcloud%2Fremix-wemake-challenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toweringcloud%2Fremix-wemake-challenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toweringcloud%2Fremix-wemake-challenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toweringcloud%2Fremix-wemake-challenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/toweringcloud","download_url":"https://codeload.github.com/toweringcloud/remix-wemake-challenge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toweringcloud%2Fremix-wemake-challenge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33096963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","flyio","gemini","openai","resend","supabase","vercel"],"created_at":"2025-08-30T12:16:38.575Z","updated_at":"2026-05-16T09:34:31.345Z","avatar_url":"https://github.com/toweringcloud.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# remix-wemake-challenge\n\nshop assistant fullstack web app using react v19 + react-router v7 framework + tailwindcss v4 + shadcn/ui + zustand + zod + drizzle + postgresql\n\n## how to run\n\n### setup\n\n- install latest bun runtime\n\n```sh\n$ curl -fsSL https://bun.sh/install | bash\nbun was installed successfully to ~/.bun/bin/bun\n\n$ bun -v\n1.2.15\n```\n\n### configure\n\n- install packages with bun\n\n```sh\n$ bun init\n$ bun i\n```\n\n- define runtime variables\n\n```sh\n$ cat .env\nDATABASE_URL=\"postgresql://{id}:{pw}@{host}:{port}/{dbname}\"\nMODE=DEV\nOPENAI_API_KEY=\nRESEND_API_KEY=\nSUPABASE_ACCESS_TOKEN=\nSUPABASE_ANON_KEY=\nSUPABASE_URL=\"https://{your_project}.supabase.co\"\nVITE_SUPABASE_URL=\nVITE_SUPABASE_ANON_KEY=\n```\n\n- generate db schema\n\n```sh\n$ bun run db:generate\n$ drizzle-kit generate\nNo config path provided, using default 'drizzle.config.ts'\nReading config file 'D:\\work\\templates\\remix-wemake-challenge\\drizzle.config.ts'\n9 tables\ncafes 10 columns 0 indexes 0 fks\ningredients 6 columns 0 indexes 2 fks\nitems 18 columns 0 indexes 2 fks\nmenus 12 columns 0 indexes 2 fks\nproducts 8 columns 0 indexes 1 fks\nrecipe_ingredients 3 columns 0 indexes 2 fks\nrecipes 8 columns 0 indexes 2 fks\nstocks 8 columns 0 indexes 1 fks\nusers 8 columns 0 indexes 1 fks\n\n[✓] Your SQL migration file ➜ app\\models\\migrations\\0000_thin_sleepwalker.sql 🚀\n```\n\n- migrate db schema\n\n```sh\n$ bun run db:migrate\n$ drizzle-kit migrate\nNo config path provided, using default 'drizzle.config.ts'\nReading config file '{workspace}\\remix-wemake-challenge\\drizzle.config.ts'\nUsing 'pg' driver for database querying\n[✓] migrations applied successfully!\n```\n\n- generate db types\n\n```sh\n$ bun run db:typegen\n$ bun x supabase gen types typescript --project-id mkhmxtzdvkpqqdmjqnmb \u003e ./app/types/database.types.ts\n```\n\n- add shadcn/ui components\n\n```sh\n$ bunx --bun shadcn@latest add button\n√ Checking registry.\n√ Installing dependencies.\n√ Created 1 file:\n  - app\\components\\ui\\button.tsx\n```\n\n- add email templates\n\n```sh\n$ npx create-email@latest\n√ React Email Starter files ready\nreact-email-starter\n├── emails\n│   ├── static\n│   │   ├── notion-logo.png\n│   │   ├── plaid-logo.png\n│   │   ├── plaid.png\n│   │   ├── stripe-logo.png\n│   │   ├── vercel-arrow.png\n│   │   ├── vercel-logo.png\n│   │   ├── vercel-team.png\n│   │   └── vercel-user.png\n│   ├── notion-magic-link.tsx\n│   ├── plaid-verify-identity.tsx\n│   ├── stripe-welcome.tsx\n│   └── vercel-invite-user.tsx\n├── package.json\n├── readme.md\n└── tsconfig.json\n```\n\n- install gcloud sdk\n  - https://cloud.google.com/sdk/docs/install\n\n- generate gcloud default credentials\n\n```sh\n$ gcloud auth application-default login\nWelcome! This command will take you through the configuration of gcloud.\n...\nYour browser has been opened to visit:\n    https://accounts.google.com/o/oauth2/auth?...\n\nCredentials saved to file: [C:\\Users\\{uid}\\AppData\\Roaming\\gcloud\\application_default_credentials.json]\n\nThese credentials will be used by any library that requests Application Default Credentials (ADC).\n\nQuota project '{your_project_id}' was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.\n...\n\n$ cat /c/Users/{uid}/AppData/Roaming/gcloud/application_default_credentials.json\n{\n  \"account\": \"?\",\n  \"client_id\": \"?.apps.googleusercontent.com\",\n  \"client_secret\": \"?\",\n  \"quota_project_id\": \"?\",\n  \"refresh_token\": \"?\",\n  \"type\": \"authorized_user\",\n  \"universe_domain\": \"googleapis.com\"\n}\n```\n\n### launch\n\n- run bun app with development mode\n\n```sh\n$ bun dev\n$ react-router dev\n  ➜  Local:   http://localhost:5173/\n  ➜  Network: use --host to expose\n  ➜  press h + enter to show help\n```\n\n- deploy docker app with production mode\n\n```sh\n$ bun run build\n$ docker build -t my-app .\n$ docker run -p 9000:3000 my-app\n```\n\n- deploy fly.io app with production mode\n\n```sh\n$ curl -L https://fly.io/install.sh | sh\n$ fly launch\n$ fly secret\n$ fly deploy\n```\n\n### test\n\n- download sample video file\n  - [Pexcel](https://www.pexels.com)\n\n- run tunnel client\n\n```sh\n$ bun -g i cloudflared\nbun add v1.2.15 (df017990)\n\ninstalled cloudflared@0.7.1 with binaries:\n - cloudflared\n\n$ cloudflared tunnel --url http://localhost:5173\n2025-09-17T17:21:08Z INF Requesting new quick Tunnel on trycloudflare.com...\n2025-09-17T17:21:11Z INF +--------------------------------------------------------------------------------------------+\n2025-09-17T17:21:11Z INF |  Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):  |\n2025-09-17T17:21:11Z INF |  https://latter-optimization-roots-tested.trycloudflare.com\n2025-09-17T17:21:11Z INF +--------------------------------------------------------------------------------------------+\n2025-09-17T17:21:11Z INF Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp]\n2025-09-17T17:21:11Z INF Version 2025.8.1 (Checksum b5d598b00cc3a28cabc5812d9f762819334614bae452db4e7f23eefe7b081556)\n2025-09-17T17:21:11Z INF GOOS: windows, GOVersion: go1.24.2, GoArch: amd64\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoweringcloud%2Fremix-wemake-challenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoweringcloud%2Fremix-wemake-challenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoweringcloud%2Fremix-wemake-challenge/lists"}