← Sign inOur Home · Email sign-in
This edition uses each family member’s email address and a separate app password. Google OAuth is not needed. The existing ChatGPT-hosted link is a private preview; deploy the app separately to remove that outer sign-in gate.
1. Database
New project: run schema.sql once. Existing project with the previous Google-only rules: run EMAIL_LOGIN_MIGRATION.sql. Do not rerun the full schema or delete tables.
2. Family list
Add the 4–6 family email addresses and display names to family_members using members.example.sql. Only active members with confirmed authentication accounts can read or write family data.
3. Login accounts
Enable the Email provider. Authentication → Users → Add user → Create new user. Enter the member’s email and a unique app password of at least 12 characters. For accounts you personally verify, select Auto Confirm User. Have each member change their app password after their first sign-in. Do not use or request anyone’s Gmail password.
These steps create app users, not Supabase administrators. Do not add family members to the Supabase organization. When all accounts are created, disable public new-user signups; existing users can still sign in.
4. Website connection
In dist/config.js, enter the Supabase project URL and public publishable key (or legacy anon key). Never put a service_role key, sb_secret key, database password or app password in website files.
5. Free hosting
Use Cloudflare Pages Direct Upload to upload the contents of dist. Its free pages.dev address is sufficient. Set Supabase Site URL to the final website address. No Google Cloud OAuth client or purchased domain is needed.
6. Email delivery and recovery
Normal password sign-in does not require sending an email. Automatic invitations, email confirmations and password-reset emails need a configured mail service; the built-in Supabase mail service only delivers to organization team members and is not a family mail service. This edition therefore uses owner-created, confirmed accounts and directs forgotten-password requests to the family owner for a controlled account recovery. It does not promise reset emails.
7. Verify
Before storing private information, test two approved accounts editing concurrently, reload both devices, upload/download a file, and verify an unlisted account and a revoked member cannot access data. Backend and device tests require a live project; local tests alone do not verify deployed settings.
Still pending
Push reminders, recurring events, rich-text formatting, live cursors, and full file backups are not included. File limit: 10 MB each. Export saves text and file metadata; download original files separately. Keep the page open if it shows unsaved changes.