R-TaskFlow Path B — clean-slate web-native PWA rebuild
Decision
Rebuild R-TaskFlow as a Next.js 16 App Router web-native PWA on the VPS, replacing the earlier ARJ999/taskflow React Native + Expo + Manus-OAuth POC. Single-org Runwal-only; email+password admin-provisioned auth; in-app notifications only; pure polling realtime; 4-state task lifecycle with 7-day reopen window; text-only channel; no attachments/sub-tasks/reassignment/multi-assignee. Stack: Next 16 + Drizzle + Postgres 17 + shadcn/ui + TanStack Query. Self-host at r-taskflow.arjtech.in behind existing Traefik.
Rationale
The RN-web rebuild architecture of the earlier POC was structurally wrong for a PWA target — bundled React Native as web added weight with zero benefit; lacked foreign keys; used pull-based “reminders” (a tRPC query that wrote notifications, broken if no one hit the endpoint); had authorization holes. Clean-slate rebuild avoided retrofitting these into a mismatched foundation. Direct-to-main execution (no CI/CD, no feature branches) chosen because this is a single-developer internal tool with fast iteration need; scripts/deploy.sh provides the deployment guardrail (build + push + redeploy + health-gate).
Alternatives Rejected
Path A (keep iterating the taskflow POC): rejected because the RN-web foundation couldn’t be incrementally fixed to match “world-class, flawless, zero-ambiguity” requirements. Path C (build as native mobile app): rejected because browser-first PWA covers iOS + Android with zero app-store friction for an internal tool.
Stack alternatives rejected: Remix (smaller ecosystem for this scope), SvelteKit (team unfamiliarity), Astro (wrong shape for stateful task UI), tRPC (Server Actions cover the need without the wire-format overhead). Postgres with real FKs over any other DB.
Scope alternatives rejected: multi-tenant (single-org suffices for Runwal use case; YAGNI); Web Push notifications (adds VAPID + SW complexity; in-app polling adequate for internal tool); sub-tasks and multi-assignee (MVP simplicity; can revisit if demand emerges).
Outcome
Pending