Dentalpin
Software de gestión de clínica dental gratis y open source: agenda, pacientes, odontograma, presupuestos y facturación. Te llevas el código, lo instalas donde quieras, sin cuotas por sillón ni por den
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗This is a Next.js project bootstrapped with create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.
The phone app is in mobile/: an Expo (React Native) app that uses the same Supabase project and reuses the logic in src/lib. It has its own package.json and needs Node 22. Setup and commands: mobile/README.md. Architecture, decisions, the web-to-app parity table and what is still unverified (iOS, hosted Supabase): docs/MOBILE.md.
The app deletes accounts through this website's DELETE /api/account endpoint, so that endpoint must be deployed before the app can delete accounts on a hosted project.
The log in and sign-up pages can show Continue with Google. It stays hidden until you turn it on.
In Google Cloud Console, create an OAuth client ID (type: Web application).
Add this authorized redirect URI: http://127.0.0.1:54321/auth/v1/callback.
Put the client ID and secret in supabase/.env (ignored by git, never commit it):
SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID=your-client-id
SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET=your-secret
In supabase/config.toml, set enabled = true under [auth.external.google], then run npx supabase stop and npx supabase start.
Add NEXT_PUBLIC_GOOGLE_AUTH_ENABLED=true to .env.local and restart npm run dev.
With the flag on but Google not set up, the button says Google sign-in is not set up yet.
Hosted projects (Vercel + Supabase):
https://<project-ref>.supabase.co/auth/v1/callback for each Supabase project (staging and production).NEXT_PUBLIC_GOOGLE_AUTH_ENABLED=true in Vercel (Production, and Preview for staging) and redeploy.To learn more about Next.js, take a look at the following resources:
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
npm run typecheck
npm run lint
npm test
npm run build
npm run test:db
npm run test:e2e
npm run test:e2e builds the app and runs the Playwright smoke test in e2e/ against local Supabase, at phone and desktop sizes. It opens every public and signed-in page and runs axe (WCAG 2.1 A and AA; any violation fails), logs in, saves a weigh-in and logs out. It also signs up a new account and opens the confirmation link from Mailpit (local Supabase's mail catcher, MAILPIT_URL, default http://127.0.0.1:54324). It creates throwaway users with the admin key from .env.local, refuses to run unless Supabase is on 127.0.0.1, and deletes the users afterwards. Install the browser once with npx playwright install chromium. After changing supabase/config.toml (for example the allowed redirect URLs), restart local Supabase with npx supabase stop then npx supabase start; stop keeps your data. CI runs it in the e2e job on a fresh local stack.
npm run test:db runs the database tests in supabase/tests/database (pgTAP: grants, row-level security and the save functions) against local Supabase, so start it first with npx supabase start. Each test file runs in one transaction and is rolled back.
CI runs the same checks on every push and pull request (.github/workflows/ci.yml); the database tests run in their own job on a fresh database with the migrations and supabase/seed.sql. Copy .env.example to .env.local for local settings.
Do not deploy until the launch review in docs/PLAN.md is done. Setup, deploys, monitoring, backups and rollback are in docs/RUNBOOK.md.