vitorpamplona

vitorpamplona

@vitorpamplona

GitHub
31 Skills
49972 Total Stars
February 2026 Joined

Public Skills

find-missing-translations

by vitorpamplona

Use when comparing Android strings.xml locale files to find untranslated string resources, missing translation keys, or preparing translation work for a specific language

Design 1.6K 1mo ago

find-non-lambda-logs

by vitorpamplona

Use when auditing or migrating Log calls — flags interpolated Log.d/i/w/e that should use the lambda overload (allocation hygiene), catch-block Log.w/e that interpolate ${e.message} but drop the throwable (lost stack traces), and files still importing android.util.Log (no lambda overload, bypasses Log.minLevel)

Debugging 1.6K 1mo ago

quartz-integration

by vitorpamplona

Integration guide for using the Quartz Nostr KMP library in external projects. Use when: (1) adding Quartz as a Gradle dependency, (2) setting up NostrClient with WebSocket, (3) creating/signing/sending events, (4) building relay subscriptions with Filter, (5) handling keys with KeyPair/NostrSignerInternal, (6) using Bech32 encoding/decoding (NIP-19), (7) platform-specific setup (Android vs JVM/Desktop), (8) NIP-57 zaps, NIP-17 DMs, NIP-44 encryption in external projects, (9) running a relay on Quartz and serving/building its NIP-11 relay information document (application/nostr+json).

Code Gen 1.6K 2mo ago

relay-client

by vitorpamplona

Subscription and filter-assembly patterns for the Amethyst relay client layer in commons/.../relayClient/. Use when working with compose-scoped subscriptions (ComposeSubscriptionManager, Subscribable), filter assemblers (MetadataFilterAssembler, ReactionsFilterAssembler, FeedMetadataCoordinator), preloaders (MetadataPreloader, MetadataRateLimiter), EOSE managers, or any feature that needs to talk to relays lifecycle-aware from a composable. Complements nostr-expert (protocol filter syntax) and kotlin-coroutines (callbackFlow patterns).

Docker 1.6K 2mo ago

nip85-trusted-assertions

by vitorpamplona

The NIP-85 trusted-assertions model in Quartz (nip85TrustedAssertions/) — kind 10040 trust-provider lists, kind 30382 contact cards / user assertions, 30383 event assertions, 30384 addressable assertions, 30385 external-id assertions. Use when building or parsing these events, working with the typed tags (RankTag, HopsTag, FollowerCountTag, ServiceProviderTag/ServiceType, …), wiring a consumer that resolves a 10040 provider entry to the 30382s it signs, ranking on assertion values, or touching the GrapeRank publisher, contact-card nicknames, or the trust projection of an external store.

Code Gen 1.6K 2mo ago

searchable-events

by vitorpamplona

The NIP-50 indexing surface of Quartz — the SearchableEvent interface, which event kinds are searchable, exactly what text each kind's indexableContent() contributes, how the SQLite/filesystem stores consume it, and the NIP-50 SearchQuery extension grammar plus SearchRelayListEvent (kind 10007). Use when making a kind searchable, changing what a kind indexes, diffing the searchable set at a Quartz version bump (external search engines mirror this table), debugging why an event is or isn't found by search, or working with search extensions (include:spam, domain:, …).

Comments 1.6K 2mo ago

event-store-semantics

by vitorpamplona

The authoritative behavioral contract of Quartz's event stores — IEventStore and its reference SQLite implementation (nip01Core/store/sqlite/). Use when implementing or asserting parity with a Quartz event store (external engines like Vespa, the filesystem store, geode), answering filter-semantics questions (since/until inclusivity, tag OR/AND, multi-filter limits, ordering tiebreaks), or working on the write-path rules for replaceable/addressable supersession, NIP-09 deletions, NIP-40 expiration, NIP-62 vanish, NIP-45 counts, or NIP-50 search inside the store. Every behavior has a named rule id (STORE-Fxx/Wxx/Dxx/Sxx/Cxx) so downstream implementations can annotate divergences precisely.

Database 1.6K 2mo ago

nostr-expert

by vitorpamplona

Nostr protocol implementation patterns in Quartz (AmethystMultiplatform's KMP Nostr library). Use when working with: (1) Nostr events (creating, parsing, signing), (2) Event kinds and tags, (3) NIP implementations (80+ NIP packages in quartz/), (4) Event builders and TagArrayBuilder DSL, (5) Nostr cryptography (secp256k1, NIP-44 encryption), (6) Relay communication patterns, (7) Bech32 encoding (npub, nsec, note, nevent), (8) Resolving user input (hex, npub, nprofile, or NIP-05 name@domain internet identifiers) to a pubkey. Complements nostr-protocol agent (NIP specs) - this skill provides Quartz codebase patterns and implementation details.

Processing 1.6K 3mo ago

ngit-pr

by vitorpamplona

How to create, review, revise, and merge pull requests in this repo, which can be published TWO ways — GitHub (the gh CLI) and git-over-nostr (the ngit CLI, where PRs are nostr proposals reviewed on gitworkshop.dev). Use whenever a task involves opening/updating/merging a PR by either mechanism, the pr/feat/* branches, the ngit or gh CLIs, gitworkshop.dev, or a nostr:// remote. Remote names vary per clone (and a collaborator may have only one) — this skill identifies remotes by URL, and covers the three-mains alignment gate the nostr flow depends on.

Git & VCS 1.6K 3mo ago

amy-expert

by vitorpamplona

Patterns for extending amy, the Amethyst CLI in cli/. Use when adding an amy <verb> command, touching files under cli/src/main/kotlin/…/cli/, wiring a new subcommand into Main.kt, writing an interop test script that drives Amy, or extracting logic out of amethyst/ into commons/ so a CLI command can call it. Enforces the thin-assembly-layer rule (no Nostr protocol or business logic inside cli/), the dual-output contract (text by default, single-line JSON object on stdout under --json, exit codes 0/1/2/124), and the extract-from-Android recipe. Complements nostr-expert (protocol in Quartz), kotlin-multiplatform (expect/actual for extraction), and feed-patterns / account-state / relay-client (where the business logic should end up). NOT for general Nostr or Kotlin work — those have their own skills.

CLI Tools 1.6K 4mo ago

android-expert

by vitorpamplona

Android platform patterns for the amethyst/ module. Use when working with (1) Android navigation (Navigation Compose, type-safe routes, bottom nav), (2) runtime permissions (camera, notifications, biometrics), (3) platform APIs (Intent, Context, Activity, ContentResolver), (4) Material3 theming and edge-to-edge UI, (5) AndroidManifest.xml and intent filters, (6) Proguard/R8 and APK optimization, (7) Android lifecycle (ViewModel, collectAsStateWithLifecycle), (8) Coil image loading. Delegates shared composables to compose-expert, build files to gradle-expert, and KMP structure to kotlin-multiplatform.

Design 1.6K 4mo ago

gradle-expert

by vitorpamplona

Build optimization, dependency resolution, and multi-module KMP troubleshooting for AmethystMultiplatform. Use when working with: (1) Gradle build files (build.gradle.kts, settings.gradle), (2) Version catalog (libs.versions.toml), (3) Build errors and dependency conflicts, (4) Module dependencies and source sets, (5) Desktop packaging (DMG/MSI/DEB), (6) Build performance optimization, (7) Proguard/R8 configuration, (8) Common KMP + Android Gradle issues (Compose conflicts, secp256k1 JNI variants, source set problems).

CLI Tools 1.6K 4mo ago

auth-signers

by vitorpamplona

Signer abstraction patterns in Amethyst. Use when working with event signing, choosing between a local keypair (NostrSignerInternal), a remote NIP-46 bunker signer (NostrSignerRemote), or a NIP-55 Android external-app signer (NostrSignerExternal). Covers the abstract NostrSigner base class, SignerResult contract, how to wire a new flow that needs to sign events, and the security/UX trade-offs between signer kinds.

Code Gen 1.6K 4mo ago

account-state

by vitorpamplona

Account state and in-memory event store patterns in Amethyst. Use when working with Account.kt (per-user state objects — kind3FollowList, nip65RelayList, muteList, bookmarkState, each exposing a .flow StateFlow), LocalCache (the object-level event store backed by LargeCache), User/Note model classes, or any ViewModel that reads user-specific state. Covers how account events cascade from relay arrival to UI state, how to add a new account-scoped setting, and when to read from LocalCache vs subscribe to a StateFlow.

Caching 1.6K 4mo ago

feed-patterns

by vitorpamplona

Feed composition and data-access layer patterns in Amethyst. Use when adding or modifying a feed (home, profile, hashtag, bookmarks, notifications, DMs, communities), working with the shared FeedFilter / AdditiveFeedFilter / ChangesFlowFilter / FeedContentState in commons/.../ui/feeds/, the Android-only AdditiveComplexFeedFilter / FilterByListParams in amethyst/.../ui/dal/, or extending the FeedViewModel family in commons/.../viewmodels/. Covers how feeds scan LocalCache, react to changes, apply ordering, and render through Compose.

Caching 1.6K 4mo ago

desktop-expert

by vitorpamplona

Compose Multiplatform Desktop patterns for the desktopApp/ module. Use when working with (1) Desktop-only APIs (Window, WindowState, Tray, MenuBar, Dialog), (2) keyboard shortcuts and menu systems with OS-aware conventions (Cmd vs Ctrl, isMacOS branching), (3) desktop navigation (NavigationRail/sidebar vs Android bottom nav, multi-window), (4) file system integration (file pickers, drag-and-drop, Desktop.getDesktop()), (5) OS-specific behavior on macOS/Windows/Linux, (6) desktop UX principles (keyboard-first, tooltips). Delegates shared composables to compose-expert, build/packaging to gradle-expert, and source-set structure to kotlin-multiplatform.

Design 1.6K 4mo ago

kotlin-expert

by vitorpamplona

Advanced Kotlin patterns for AmethystMultiplatform. Flow state management (StateFlow/SharedFlow), sealed hierarchies (classes vs interfaces), immutability (@Immutable, data classes), DSL builders (type-safe fluent APIs), inline functions (reified generics, performance). Use when working with: (1) State management patterns (StateFlow/SharedFlow/MutableStateFlow), (2) Sealed classes or sealed interfaces, (3) @Immutable annotations for Compose, (4) DSL builders with lambda receivers, (5) inline/reified functions, (6) Kotlin performance optimization. Complements kotlin-coroutines agent (async patterns) - this skill focuses on Amethyst-specific Kotlin idioms.

Code Gen 1.6K 4mo ago

kotlin-types-value-class

by vitorpamplona

Use when writing or reviewing Kotlin type declarations to choose @JvmInline value class over data class where appropriate, including Compose stability implications. Technique-layer skill — complements the codebase-specific kotlin-expert.

Comments 1.6K 5mo ago

kotlin-flow-state-event-modeling

by vitorpamplona

Use when writing or reviewing Kotlin StateFlow/SharedFlow/Channel choices, sentinel default values, stateIn placement, WhileSubscribed staleness, or MutableStateFlow update patterns. Technique-layer skill — complements the codebase-specific kotlin-expert.

Processing 1.6K 5mo ago

compose-stability-diagnostics

by vitorpamplona

Use when writing or reviewing Jetpack Compose parameter stability, compiler reports, skippability, unstable UI state classes, collection parameters, or Kotlin 2.0+ strong skipping behavior. Technique-layer skill — complements the codebase-specific compose-expert and kotlin-expert.

Comments 1.6K 5mo ago

compose-slot-api-pattern

by vitorpamplona

Use when designing or reviewing a reusable Jetpack Compose component whose visual regions vary by caller, or when primitive content parameters and boolean shape flags are accumulating. Technique-layer skill — complements the codebase-specific compose-expert.

Design 1.6K 5mo ago

compose-state-deferred-reads

by vitorpamplona

Use when Jetpack Compose code reads scroll, animation, gesture, or other frame-rate State in composition, passes changing values across composable boundaries, or uses value-form layout/draw modifiers. Technique-layer skill — complements the codebase-specific compose-expert.

Animation 1.6K 5mo ago

compose-recomposition-performance

by vitorpamplona

Use when investigating Jetpack Compose recomposition performance, skippable/restartable composables, composables.txt or compiler reports, Layout Inspector recomposition counts, or frame-rate State reads in composition vs layout/draw, and it is not yet clear whether the cause is parameter stability or deferred reads. Technique-layer skill — complements the codebase-specific compose-expert.

Design 1.6K 5mo ago

compose-side-effects

by vitorpamplona

Use when writing or reviewing Jetpack Compose code with LaunchedEffect, DisposableEffect, SideEffect, rememberCoroutineScope, rememberUpdatedState, snapshotFlow, snackbar, navigation, focus requests, analytics, or event Flow collection. Technique-layer skill — complements the codebase-specific compose-expert.

Analytics 1.6K 5mo ago