smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기TIFEC forms and other systems
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Secure, HIPAA-conscious client intake for the TIFEC psychology practice. • One shared base intake form plus per-clinician sections (configurable). • A client picks (or is linked directly to) one of the 5 clinicians and submits. • Answers are encrypted (AES-256-GCM) before storage. • The clinician gets an email with a secure link only — no PHI in the email. • Staff can view all submissions at /admin. ⚠️ HIPAA / compliance — read firstREADME 전문 보기 ↗
Secure, HIPAA-conscious client intake for the TIFEC psychology practice.
/admin.This app is built defensively (encryption at rest, no PHI in email), but you are responsible for making the full deployment HIPAA-compliant before using it with real clients:
/admin?key= and token links with real staff logins
(e.g. NextAuth tied to your TIFEC accounts) before go-live.Digitized faithfully from TIFEC's paper forms (lib/forms.ts):
INDIVIDUAL_INTAKE) — personal info, marital &
mental-health history, general health, drug history, family mental-health
history (select-all-that-apply), additional info, insurance + consent.COUPLES_INTAKE) — a single-person form each partner
fills out separately. The clinician clicks "Start a couple" on their
dashboard to generate one link, sends it to both partners, and the two
submissions are tied together by a shared couple_id. The dashboard tags them
"👥 Couple" and each submission links to the other partner's form.INFORMED_CONSENT) — the full consent
text shown to the client with an electronic signature, appended to intake
forms (controlled per form via appendConsent).DSM_LEVEL1_ADULT)
— the APA's 23-item self-rated screening measure (verbatim, 0–4 scale). A
repeatable measure, so it carries no consent/insurance section. © APA;
reproduced under their clinician-use terms and must not be modified.
lib/dsm.ts): the clinician's view shows a Symptom screen
summary — the highest score per domain, flagging domains that reach APA's
threshold for further inquiry (Mild 2+, or Slight 1+ for Suicidal Ideation,
Psychosis, Substance Use). Endorsed suicidal ideation gets a prominent alert.
A screening aid, not a diagnosis.Each clinician has a forms list in lib/clinicians.ts — one or more form
keys they offer. Their dashboard shows a separate shareable link per form, and
each submission records which form was used (so it always renders correctly).
// one form:
forms: ["individual"],
// a clinician who sees both individuals and couples:
forms: ["individual", "couples"],
When a clinician offers more than one form, the client either uses a direct
link (/intake?clinician=<id>&form=<key>) or picks the form on arrival. The
child/adolescent clinician also adds a guardian section via extraSections.
To add a new form (e.g. child intake, telehealth consent, release of info):
define it in lib/forms.ts as a new entry in FORM_TEMPLATES, then add its key
to the relevant clinicians' forms list. Nothing else needs to change.
Any field can declare a showIf rule so it only appears when relevant — e.g.
"How long have you been married?" shows only when Marital status = Married, and
the insurance details show only when the client says they'll use insurance.
{ name: "alcohol_freq", label: "How many times per week…", type: "text",
showIf: { field: "alcohol", equals: "Yes" } }
Conditions support equals, in: [...], includes (for multi-selects), and
notEmpty; an array of conditions means all must match. Hidden fields are not
required for submission, and their answers are pruned (never stored) if the
client fills one and then changes the trigger. The same check runs on the server.
| What | File |
|---|---|
| Clinician names, emails, template, per-clinician questions | lib/clinicians.ts |
| The intake form questions (individual / couples / consent) | lib/forms.ts |
| Branding / colors | app/globals.css, app/layout.tsx |
npm install
npm run dev # http://localhost:3000
With no DATABASE_URL set, submissions are stored in an encrypted local file
(data/submissions.local.json) and notification emails are logged to the
console instead of sent — so you can test the whole flow with zero setup.
.env.local was created for you with a dev encryption key and
ADMIN_PASSWORD=tifec-dev (view submissions at /admin?key=tifec-dev).
db/schema.sql against it..env.example
(ENCRYPTION_KEY, DATABASE_URL, SMTP_*, APP_URL, ADMIN_PASSWORD).
openssl rand -hex 32. Keep it safe — losing it
makes existing submissions unreadable.https://your-app/intake?clinician=<id> links with clients.Each psychologist logs in and sees only their own intake forms, with status tracking (New → Reviewed → Archived).
Creating logins (admin): open /admin?key=<ADMIN_PASSWORD>. You'll see all 5
clinicians; set an initial password for each and share it with them securely.
They sign in at /login and can change their own password at /account.
Security model:
SESSION_SECRET), HTTP-only, 8-hour expiry.For production, consider replacing the shared-password /admin?key= with a
dedicated admin login. The admin page shows only counts — no client PHI.
From the dashboard and a submission:
access_log table (or data/access_log.local.json in dev). Supports HIPAA access-tracking expectations./ — landing + per-clinician links + clinician sign-in/intake — the form (clinician picker, or ?clinician=<id>); autosaves drafts/login, /account — clinician sign-in and change-password/dashboard — clinician's own submissions: search, counts, status filters, share link/submissions/<token> — secure view (login + ownership): snapshot, notes, status, print, delete/admin?key=<ADMIN_PASSWORD> — manage clinician logins (no PHI)/api/submit, /api/auth/*, /api/submissions/{status,notes,delete}, /api/admin/set-password, /api/account/password