smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
가상 병원 관리·의대생 임상 교육 플랫폼으로 포트폴리오용이며 데이터는 허구임
A simulated hospital management system and medical-student clinical-education platform — portfolio project, fictional data only, not for real medical use.
건강TypeScript · CSSGitHub @Majeezy온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A simulated hospital management system and medical-student clinical-education
platform, sharing one backend, one database, and one role-based permission
model, by Kudzaishe Majeza.
This is a portfolio/educational project. All data is fictional. It is
not intended for real patient data, real diagnoses, or any real clinical
use — see Section 10 of the architecture doc
for more on that boundary.
Live demo: teaching-hospital-platform.vercel.app
— sign in with the demo admin account below, or register as a patient.README 전문 보기 ↗A simulated hospital management system and medical-student clinical-education platform, sharing one backend, one database, and one role-based permission model, by Kudzaishe Majeza.
This is a portfolio/educational project. All data is fictional. It is not intended for real patient data, real diagnoses, or any real clinical use — see Section 10 of the architecture doc for more on that boundary.
Live demo: teaching-hospital-platform.vercel.app — sign in with the demo admin account below, or register as a patient.
Status: ✅ Phases 0–5 complete (0–4: core system; 5: visual identity). 🚧 Phase 6 (production-readiness hardening) under way: a separate dev/prod database and real file uploads are done; real email delivery, rate limiting, and a harder security pass are still pending.
PostgreSQL via Neon. The runtime app connects through
Neon's pooled endpoint using @prisma/adapter-pg; the Prisma CLI
(migrations, seeding) uses the direct endpoint, configured in
prisma.config.ts rather than schema.prisma (a Prisma 7 change).
Two connected halves:
The two connect through one relationship: a student can be assigned to shadow a specific doctor's appointment with explicitly scoped access — never unrestricted access to a patient's full record.
Full design rationale, the entity-relationship diagram, the permissions
matrix, and the roadmap live in docs/architecture.md.
Deliberate scope cuts (no self-service password reset, no rate
limiting, etc.) are listed explicitly in that document's
Known limitations section.
npm install
cp .env.example .env.local # then fill in your own Neon connection strings
npx prisma migrate dev # applies the schema to your database
npx prisma db seed # seeds roles, departments, competency catalog
npm run dev
Open http://localhost:3000.
Demo admin account (seeded, fictional — not a real credential, don't
reuse this password anywhere real): [email protected] /
DemoAdmin123!. Staff and student accounts are provisioned by an admin,
not self-registered — sign in with this account and use /admin/staff or
/admin/students to create them.
npm test
Unit tests (tests/unit/) cover the pure authorization logic in
lib/permissions.ts. Integration tests (tests/integration/) run against
the real development database — same connection as the app itself — and
clean up after themselves. No mocking the database: these tests exist
specifically to catch real authorization bugs ("can a patient deactivate
another user?"), which a mocked Prisma client can't meaningfully verify.
npm run test:e2e
End-to-end tests (tests/e2e/, Playwright) drive a real, built app in a
real browser through its critical journeys — login, a patient booking and
a doctor completing an appointment with clinical records, a supervisor
assigning shadowing through to a student's reflection and feedback, and
admin account provisioning including a password reset. These exist for
what the tests above structurally can't catch: a button whose onClick
silently does nothing, a crash that only happens in a browser console.
Runs against next build && next start, not next dev — real Neon
network latency is generous-timeout territory here too, same reasoning as
the integration tests.
Phases 0–5 are complete: the original scope, plus a real visual
identity and a round of production-readiness hardening. Phase 6 (the
rest of that hardening) is under way. See docs/architecture.md for
what each phase actually contains, including the two genuine bugs
(dark mode never actually activating; a sequential-query latency bug on
the activity detail page) found during Phase 5, and two infrastructure
findings from Phase 6 Stage 2 (client-upload token generation needs a
static Blob read-write token even though every other Blob operation
accepts OIDC; the CSP's connect-src needed an explicit exception for
the browser-to-Blob upload).