Review app: https://staging-pr-359.mediagraph.io/login
Basic auth: staging / 2d34745ed4ef2761
App login: use any staging org admin account.
PR: https://github.com/mediagraph-io/mediagraph/pull/359
Review app: https://staging-pr-359.mediagraph.io/login
Basic auth: staging / 2d34745ed4ef2761
App login: use any staging org admin account.
PR: https://github.com/mediagraph-io/mediagraph/pull/359
Hi Andy! The first build of the Alterations Queue is live on staging for you to kick the tires before we ship to prod. Below is a walkthrough — about 15 minutes start to finish.
Where: https://staging.pima.io Log in with: your normal PIMA account.
This is staging, so any emails that go out land in a sandbox — feel free to click freely.
| Mediagraph iOS/iPad app spec — universal SwiftUI, OAuth via Devise, 5-phase plan | |
| <@UTW1FF5U6> here's a v1 spec for an iOS/iPad app, built against the existing API surface (~800 routes under the API namespaces, ~1,050 total), the auth stack (Devise + JWT + Doorkeeper OAuth + entity-level scopes), and the web app's primary feature set. Tradeoffs and open questions called out inline. Technical claims below were verified against the codebase on 2026-06-16 — see the verification note at the end. | |
| *Stack & approach* | |
| • Single *universal* SwiftUI app, iOS/iPadOS 17+, App Store + TestFlight | |
| • SwiftUI first; drop to UIKit for hot paths — asset grid (`UICollectionView` compositional layout), video (AVKit + trimmer), drag-and-drop | |
| • Auth: OAuth 2.0 + PKCE via `ASWebAuthenticationSession` against the existing Devise + Doorkeeper flow — gets us SAML/SSO/2FA for free. *Confirmed:* Doorkeeper already runs `force_pkce` with `grant_flows %w[authorization_code client_credentials]` and `use_refresh_token`, so PKCE is the server |
Production was down ~2 hours (7:30–9:30 AM ET). No data loss.
Cause: ES license expired → web workers hung → thundering herd on recovery → exposed latent N+1-style COUNT queries in the asset show endpoint that couldn't survive 130 concurrent connections. DB pinned at 100% CPU. Compounded by ~100K queued Sidekiq jobs and a Kintzing API client hitting us at 140 req/s.
Fix: Shipped 5 targeted fixes during the incident — eliminated 6+ expensive COUNT queries per asset show (upload progress counts, contribution counts, requirement checks). These now use cached counter columns or are skipped entirely for done uploads and API traffic.
Great news — we just built out the Saved Meals feature you asked about! Here's what you can do now:
"Create a meal called Cold Cereal: 3/4 cup Bob's Old Country Style Muesli, 1/4 cup granola, 1/4 cup trail mix, 1/2 cup unsweetened hemp milk, 1/2 cup kefir, and 1 scoop whey protein powder"
The coach will look up the macros for each ingredient and save it as a reusable template.
| FROM phusion/baseimage:0.9.11 | |
| # https://github.com/phusion/baseimage-docker | |
| MAINTAINER Nick Merwin <nick@softcover.io> | |
| ENV HOME /root | |
| RUN /etc/my_init.d/00_regen_ssh_host_keys.sh | |
| CMD ["/sbin/my_init"] | |
| # ============================================================================== | |
| # install deps |
| yo yo yo yo\n yo yo yo |
I hereby claim:
To claim this, I am signing this object:
| module Sunspot | |
| module SessionProxy | |
| class TandemSessionProxy < AbstractSessionProxy | |
| attr_reader :search_session | |
| delegate :new_search, :search, :config, | |
| :new_more_like_this, :more_like_this, | |
| :delete_dirty, :delete_dirty?, | |
| :to => :search_session |