CleanFrame
삼성 The Frame용 개인 홈 화면, 포크와 맞춤을 위한 시작점
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A mystical tarot and astrology app built with React, TypeScript, Capacitor, and Supabase.
The app includes a comprehensive diagnostics system for debugging authentication and other issues, especially useful for OAuth troubleshooting.
In Development Mode:
• Go to Settings > Support > Developer Diagnostics
• The diagnostics option is always visible in dev builds
In Production Mode:
• Go to Settings
• Tap the version number at the bottom (e.g., "Arcana v1.0.0") 5 times
• "Developer Diagnostics" will appear in the Support sectionREADME 전문 보기 ↗A mystical tarot and astrology app built with React, TypeScript, Capacitor, and Supabase.
The app includes a comprehensive diagnostics system for debugging authentication and other issues, especially useful for OAuth troubleshooting.
In Development Mode:
In Production Mode:
From Error Toasts:
From Crash Screens:
localStorage under key arcana-diagnostics-logs@capacitor/preferences under the same keyEach log entry includes:
correlationId: Groups related auth operations (e.g., oauth-1706789012345-abc123)step: The operation name (e.g., auth.google.initiate, auth.callback.exchangeCode)level: info, warn, or errormessage: Human-readable descriptiontimestamp: Unix timestamp in millisecondselapsed: Duration in ms (for span-based logs)data: Additional context (sanitized)platform: web, android, or iosWhen OAuth fails, the diagnostics panel shows:
exchangeCodeForSession result?) or hash (#)The report is sanitized:
j***[email protected])[REDACTED:Nchars]| Code | Meaning | Likely Cause |
|---|---|---|
INVALID_GRANT | Authorization code expired | OAuth flow took too long; try again |
FLOW_STATE_NOT_FOUND | PKCE state missing | App reloaded during OAuth; storage issue |
PKCE_VERIFIER_MISSING | Code verifier not found | Storage not persisting on native |
ACCESS_DENIED | User cancelled | User closed consent screen |
UNAUTHORIZED_CLIENT | App not authorized | OAuth client ID misconfigured |
Dev mode shows additional details like full stack traces:
import.meta.env.DEV to true in your buildProduction deploys are fully automated. No more netlify deploy --prod by hand.
main -> .github/workflows/deploy.yml runs: CI (typecheck + lint + test + build) -> Netlify prod deploy of dist/ -> supabase db push --linked -> supabase functions deploy for each function folder changed in the last commit. Deploy URL and list of deployed functions are written to the GitHub Actions step summary..github/workflows/preview.yml runs CI + ships a Netlify deploy preview and comments the unique URL on the PR.android job in ci.yml on main.Add these at https://github.com/lawrencema000-gif/TAROT/settings/secrets/actions:
| Secret | Source |
|---|---|
NETLIFY_AUTH_TOKEN | https://app.netlify.com/user/applications#personal-access-tokens |
NETLIFY_SITE_ID | ff59834d-82e1-44a8-8ae5-0aef6d1621e1 |
SUPABASE_ACCESS_TOKEN | https://supabase.com/dashboard/account/tokens |
SUPABASE_DB_PASSWORD | DB password for project ulzlthhkqjuohzjangcq |
SUPABASE_PROJECT_ID | ulzlthhkqjuohzjangcq |
VITE_SUPABASE_URL | Same value as in local .env |
VITE_SUPABASE_ANON_KEY | Same value as in local .env |
Every build emits /version.json with the git SHA, build time, and package version. It's served with Cache-Control: no-store.
curl https://tarotlife.app/version.json
npm run deploy:check # compare live SHA vs local HEAD
npm run deploy:check -- <preview-url>
One click, no CLI:
For DB migrations, roll back by pushing a forward-fix migration — do not supabase db reset against prod.
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Android development
npm run android:build
npm run android:run
Every page load auto-reports the five standard Core Web Vitals (LCP, CLS,
INP, FCP, TTFB) to GA4 as web_vital custom events. Each event carries
the build SHA (VITE_BUILD_SHA) so regressions surface per-deploy.
src/utils/webVitals.ts, called from src/main.tsx after
initAnalytics() so the gtag queue is primed first.navigator.connection.effectiveType = 2g/3g),
reporting is deferred through requestIdleCallback with a 1-second
timeout to avoid stealing CPU from render.analytics.ts.View the data: GA4 → Reports → Engagement → Events → filter on
web_vital. Pivot by the release param to compare builds.
Custom timings: emit any additional timing (e.g. sign-in duration,
horoscope fetch time) via reportCustomVital(name, value) from
src/utils/webVitals.ts. It lands in the same web_vital stream with
rating = 'custom'.