| | --- |
| | 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 |
| | ``` |
| |
|