| --- |
| title: mbok_dev |
| emoji: 🔐 |
| colorFrom: blue |
| colorTo: green |
| sdk: docker |
| pinned: false |
| --- |
| |
| # mbok_dev |
| |
| Public gateway with Supabase authentication that dynamically loads the private ver20 application from `DLPO/habadashi` Space. |
| |
| ## Features |
| |
| - Supabase email/password authentication |
| - Cookie-based session management |
| - Dynamic loading of private application code (source code not exposed in public repo) |
| - Role-based access control via profiles table |
| |
| ## Environment Variables (Set in HF Space Secrets) |
| |
| - `SUPABASE_URL`: Your Supabase project URL |
| - `SUPABASE_KEY`: Your Supabase anon/service key |
| - `HF_TOKEN`: Hugging Face token with access to private `DLPO/habadashi` Space |
| - `OPENAI_KEY`: OpenAI API key (required by ver20) |
| - `CLIENTPOOL`: Client pool configuration (required by ver20) |
|
|
| ## Architecture |
|
|
| 1. User visits public Space |
| 2. Bootstrap downloads ver20 from private `DLPO/habadashi` Space |
| 3. User logs in with Supabase credentials |
| 4. On successful login, ver20 Gradio app is mounted at `/app/` |
| 5. User profile and organization info loaded from `profiles` table |
|
|
| ## Startup Phase Logging |
|
|
| The application logs structured startup phases to help diagnose issues. Look for these phase markers in the logs: |
|
|
| ### Expected Startup Sequence |
|
|
| 1. `[STARTUP_META]` - Environment and configuration info |
| 2. `[PHASE] bootstrap_start` - Begin downloading private app |
| 3. `[PHASE] bootstrap_end success=true` - Private app downloaded |
| 4. `[PHASE] supabase_init_start` - Initialize Supabase client |
| 5. `[PHASE] supabase_init_end success=true` - Supabase ready |
| 6. `[PHASE] fastapi_init_start/end` - FastAPI app created |
| 7. `[PHASE] create_ui_start/end` - Login UI created |
| 8. `[PHASE] import_ver20_start` - Import ver20 app |
| 9. `[PHASE] import_ver20_end success=true` - Ver20 loaded |
| 10. `[PHASE] mount_login_start/end` - Login UI mounted |
| 11. `[PHASE] mount_app_start/end` - Ver20 app mounted |
| 12. `[STARTUP_COMPLETE]` - All phases complete |
|
|
| ### Health Check Endpoint |
|
|
| Once started, check the health endpoint: |
|
|
| ```bash |
| curl https://DLPO-mbok-dev.hf.space/healthz |
| ``` |
|
|
| Expected response: |
| ```json |
| { |
| "ok": true, |
| "ver20_loaded": true, |
| "private_app_dir": "./private_app" |
| } |
| ``` |
|
|
| ### Debugging Startup Failures |
|
|
| If the Space fails to start or restarts repeatedly: |
|
|
| 1. **Check the last phase reached** in logs |
| 2. **Look for `[ERROR]` and `[TRACEBACK]` markers** after the last phase |
| 3. **Common failure points:** |
| - `bootstrap_end success=false` - HF_TOKEN missing or invalid |
| - `supabase_init_end success=false` - SUPABASE_URL/KEY missing |
| - `import_ver20_end success=false` - Ver20 app.py structure issue |
| - No phases after `mount_app_end` - Port binding or health check issue |
|
|
| ### Request Logging |
|
|
| All HTTP requests are logged with: |
| - `[REQUEST]` - Incoming request (method, path) |
| - `[RESPONSE]` - Response status and duration |
|
|
| Example: |
| ``` |
| [REQUEST] method=GET path=/ |
| [RESPONSE] method=GET path=/ status=307 duration=0.015s |
| ``` |
|
|