jungle-studio-data-platform

/home/avalon/.hermes/skills/devops/jungle-studio-data-platform/SKILL.md ยท raw

Jungle Studio Data Platform

Overview

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.

When to Use

1. Shared-platform mental model

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.

2. Mariana Tek sync lessons

3. Data semantics that drive the product

4. Operational/app-integration lessons

5. Physical commerce / product fulfillment pattern

Use this skill for Jungle physical-product work too: admin product creation, mobile/storefront catalog, Stripe one-time checkout, orders, shipping labels, tracking, and fulfillment state. See references/physical-commerce-product-fulfillment.md for the current file map and durable architecture pattern.

Key rule: Jungle DB owns catalog, order, fulfillment, and tracking state; Stripe owns payment state only. For shippable physical products, Stripe payment success should create a paid order plus an unfulfilled/ready-to-ship fulfillment record โ€” do not mark physical fulfillment complete just because the PaymentIntent succeeded.

When changing products or checkout, remember dashboard and mobile share the DB but implement product/catalog/Stripe paths in separate files; update both surfaces and any dev duplicate API (vite-plugin-api.ts) when relevant.

6. Instructor mobile test-user pattern

See references/instructor-mobile-test-user.md for exact SQL and verification commands.

6. Jungle brand system (visual / styling work)

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

Common Pitfalls

  1. Deleting/deduplicating class sessions without preserving FK relationships
  2. Counting reservations with COUNT(*) when MT duplicates are common
  3. Treating non-reformer zero-spot results as a bug
  4. Forgetting that both apps share the same DB and expectations
  5. Assuming uploaded instructor files automatically show up in client payloads

Verification Checklist