- app/[locale]/(auth)/layout.tsx: centered card layout for unauth routes
- app/[locale]/(auth)/sign-in/page.tsx: Server Component, redirects
authed users to dashboard, renders SignInForm
- app/[locale]/(auth)/sign-in/sign-in-form.tsx: Client form with RHF
(zodResolver, mode onBlur) + useActionState(signInAction). Form root
is <form action={dispatchAction}>. Server fieldErrors sync into RHF
via useEffect for consistent inline UX. aria-invalid/aria-describedby
set for accessibility.
- app/[locale]/layout.tsx: mounts <Toaster richColors position="top-right" />
inside NextIntlClientProvider
- components/ui/{button,input,label,sonner}.tsx: shadcn primitives
installed via shadcn CLI v4 (Tailwind v4 CSS-first)
- messages/{vi,en}.json: title + subtitle keys under auth.signIn
Scope honored: no next= plumbing, no rate-limit i18n keys (both cut from
phase 03), no unenrolledError key (action uses invalidCredentials for
both wrong-password and unenrolled paths per enumeration defense).
BSK (Rewrite)
An educational rewrite of the BSK All-in-One Clinic Management System into a modern web stack.
Original project: lds217/BSK-All-in-One-Clinic-Management-System by @lds217 — a Java/Swing desktop application with a Netty server and SQLite backend, built for small Vietnamese clinics.
This repository is a clean-room reimplementation for learning purposes. No source code is copied from the original; features and data shapes are reimplemented from the upstream README and observable behavior. See NOTICE for full attribution.
Status
Planning phase. See PLAN.md for the architecture and phased roadmap.
Stack
- pnpm + Next.js 16 (App Router) + TypeScript
- Supabase (Postgres + Auth + Storage) — shared across personal projects via schema-per-app
- Upstash Redis + QStash — shared across personal projects via key prefixes
- Vercel for hosting
- shadcn/ui + Tailwind CSS
Important disclaimers
- Educational use only. This codebase is not certified for clinical use and must never be deployed against real patient data. Use synthetic data only.
- No HIPAA / GDPR compliance is implied or attempted on the free-tier infrastructure.
- This is a derivative work for learning; if you are the upstream author and would like additional attribution or removal, please open an issue.
Database
After pnpm db:push, run pnpm db:gen-types to refresh types/supabase-bsk.ts.
License
This repository is licensed under the Apache License 2.0. The original project does not currently carry an explicit license; see NOTICE for the attribution stance.