The subscribe/disable flow awaited several browser APIs that on certain devices — most reliably iOS Safari in a non-installed PWA — return a Promise that never resolves or rejects (requestPermission, serviceWorker .ready, pushManager.subscribe). When any of them hung, the try/finally never ran, so `busy` stayed true forever: the dashboard nudge button stuck at "..." and the settings toggle refused to flip. Every awaited step is now wrapped in withTimeout(15s). Failures surface as toasts instead of silent hangs (subscribe success, permission denied, generic error). iOS Safari without the site installed to home screen — where Web Push physically cannot work — short-circuits with an add-to-home-screen instruction before we ever try, so we don't burn a timeout waiting for a doomed subscribe(). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| app | ||
| docs | ||
| k8s | ||
| public | ||
| scripts | ||
| src/api/types | ||
| .dockerignore | ||
| .env.development | ||
| .env.example | ||
| .env.production | ||
| .eslintrc.cjs | ||
| .gitignore | ||
| bun.lock | ||
| components.json | ||
| DEPLOYMENT.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| generate-types.ps1 | ||
| generate-types.sh | ||
| openapi-generator-cli.jar | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.js | ||
| README.md | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vite.config.ts | ||
Welcome to Remix - yay!
Development
Run the dev server:
npm run dev
Deployment
First, build your app for production:
npm run build
Then run the app in production mode:
npm start
Now you'll need to pick a host to deploy it to.
DIY
If you're familiar with deploying Node applications, the built-in Remix app server is production-ready.
Make sure to deploy the output of npm run build
build/serverbuild/client
Styling
This template comes with Tailwind CSS already configured for a simple default starting experience. You can use whatever css framework you prefer. See the Vite docs on css for more information.