Skip to content

Instantly share code, notes, and snippets.

View Dwite's full-sized avatar
🔬
Idea-rich, sleep-poor: that's the dad-indie hacker's life!

Valerii Kuznietsov Dwite

🔬
Idea-rich, sleep-poor: that's the dad-indie hacker's life!
View GitHub Profile
@Dwite
Dwite / release-management-proposal.md
Last active February 18, 2026 12:05
Mobile Release Management: Evaluation Proposal — Tramline vs Runway

Mobile Release Management: Evaluation Proposal

TL;DR

We release iOS + Android weekly (104 releases/year). Our release process has several pain points that slow us down and create risk:

  • No centralized release visibility — release status, rollout percentage, and health are scattered across Play Console, App Store Connect, and Crashlytics. There's no single place to see "where are we?"
  • No automated crash response — if a bad build ships Friday, it can reach 100% of users before anyone checks Monday. We have no auto-halt.
  • Android rollouts are manual — iOS has auto staged rollout, but Android requires someone to manually advance percentages in Play Console. A centralized tool handles both platforms in one place.
  • iOS release coordination overhead — iOS team manually spins off release branches and manages Asana release projects every cycle. Repetitive weekly work that a tool can automate.
@Dwite
Dwite / offers-analytics-events.md
Created February 14, 2026 15:48
Offers Analytics Events — PDP → MOP Flow (for Data Science & Eng)

Offers Analytics Events — PDP → MOP Flow

Audience: Data Science & Engineering Tracking System: Snowplow Structured Events (P2P module) Generated: 2026-02-14

All offer-related analytics are tracked via Snowplow structured events through the P2P module's KMP analytics layer. The main app (thredUP/) module does not fire any offer-specific events — tracking begins when the Make Offer bottom sheet component initializes.

Event structure: action | category | label | property | value

@Dwite
Dwite / apollo-ios-upgrade-proposal.md
Created February 10, 2026 14:22
Apollo iOS Upgrade Proposal: 0.50.0 → 2.0

Apollo iOS Upgrade Proposal: 0.50.0 → 2.0

Current Version: 0.50.0 (released ~2022) Latest Stable: 2.0.6 (February 2025) Recommendation: Upgrade to benefit from Swift concurrency, stability fixes, and long-term support


Why Upgrade?

@Dwite
Dwite / p2p_analytics_kpi_spec.md
Created January 15, 2026 15:45
P2P Seller Funnel Analytics - KPI Event Specification for Snowplow (Android & iOS)

P2P Seller Funnel Analytics - KPI Event Specification

Overview

This document provides the exact Snowplow event specifications for P2P seller funnel KPIs on both Android and iOS platforms. Both platforms use shared KMM analytics code, ensuring consistent event tracking.


Critical Note: Page Type Schema Limitation

@Dwite
Dwite / thredup-shop-app-overview.md
Created January 15, 2026 13:45
ThredUp Shop App - New Engineer Overview

ThredUp Shop App - Engineering Overview

What Is This?

A modern React e-commerce PWA powering thredup.com. It's an isomorphic (server-side rendered) application built for performance and maintainability.


Tech Stack

Exception java.lang.IndexOutOfBoundsException: setSpan (-1 ... 24) starts before 0
at android.text.SpannableStringInternal.checkRange (SpannableStringInternal.java:499)
at android.text.SpannableStringInternal.setSpan (SpannableStringInternal.java:199)
at android.text.SpannableStringInternal.setSpan (SpannableStringInternal.java:186)
at android.text.SpannableString.setSpan (SpannableString.java:60)
at androidx.compose.ui.text.platform.extensions.SpannableExtensions_androidKt.setSpan (SpannableExtensions.android.kt:81)
at androidx.compose.ui.text.platform.extensions.SpannableExtensions_androidKt.setColor-RPmYEkk (SpannableExtensions.android.kt:507)
at androidx.compose.ui.text.platform.AndroidAccessibilitySpannableString_androidKt.setSpanStyle (AndroidAccessibilitySpannableString.android.kt:95)
at androidx.compose.ui.text.platform.AndroidAccessibilitySpannableString_androidKt.toAccessibilitySpannableString (AndroidAccessibilitySpannableString.android.kt:63)
at androidx.compose.ui.platform.Andro
import kotlin.math.max
data class Location(val latitude: Double, val longitude: Double)
fun longestUncommonSubsequence(arr1: List<Location>, arr2: List<Location>): Pair<Int, Int> {
if (arr1 == arr2) {
// If both lists are equal, return -1 as both start and end indices
return Pair(-1, -1)
}