Use this for the whole Jungle Studio data platform: Mariana Tek ingestion, shared Postgres behavior, dashboard/mobile API semantics, and the data-quality quirks that shape product logic. The maintainable unit is the platform, not separate micro-skills for one report or one admin screen bug.
Two apps share one Postgres database: - jungle dashboard - jungle mobile
Any schema or dedup change must be validated against both apps. Data fixes that look safe for one surface can silently break the other.
/api/ auth/proxy mistakes can make whole dashboards appear empty000/502 while tsx server.ts is booting; wait a few seconds and retry before treating it as a failed deploySee references/instructor-mobile-test-user.md for exact SQL and verification commands.
For ANY Jungle UI restyling, brand alignment, mobile-app theming, or new partner-facing UIs, the canonical brand source is Exxir/jungle-website (Railway service jungle-website in exxir's Projects → Exxir App), NOT the mobile or dashboard apps. See references/jungle-brand-system.md for: color tokens, the three-family type system (Termina / Magnat Head / Queens), spacing/radii/shadows, the signature arch shape, component patterns observed on the live site, the Tailwind 4 @theme porting strategy, and the token-only vs per-screen-redesign decision split. Use the railway-cli skill to discover the right service and pull the source.
When Alex asks for a test instructor user for the mobile app, create/update both layers in the shared Postgres DB:
- employees: active row with roles = ARRAY['Instructor']::text[]; the mobile instructor APIs require active = true AND 'Instructor' = ANY(roles)
- app_users: row linked by employee_id, with role = 'instructor', status = 'active', and a stable email/auth subject
- Current instructor mobile view is route/API driven, not password-auth driven: /instructor/:id calls GET /api/instructors/:id/mobile, which sets the Zustand role via setInstructorUser(...)
- Verify with local and public GET /api/instructors/ID/mobile, GET /api/employees/instructors, and the SPA route https://jungle-mobile.apps.poofc.com/instructor/ID
- If the test instructor needs useful schedule cards, also assign future rows in class_session_instructors; an instructor with no assignments will still load but shows zero upcoming classes
COUNT(*) when MT duplicates are common