Application platform
A Node.js and TypeScript modular monolith uses an embedded GraphQL gateway and enforced module boundaries without introducing distributed operations before they are justified.
Founder-owned production work
Emberside is a founder-owned consumer software platform, not an external consulting client. It provides a current, inspectable example of how architecture, delivery, privacy, observability, and recovery decisions are made under real operating constraints.
Selected evidence, sanitized for publication.Last reviewed September 2026.
Operating context
Long-lived mobile clients and an evolving API must remain compatible while identity, relationships, messaging, and media carry different authorization and privacy concerns.
Background delivery and real-time messaging introduce partial failure and reconciliation. Android, backend, messaging, identity, infrastructure, and static-web surfaces move at different cadences rather than pretending to be one release.
The platform is founder-operated. That makes supportability a design constraint: changes need useful failure evidence, bounded operational work, and a recovery path that does not assume a large operations team is waiting nearby.
Platform characteristics
A Node.js and TypeScript modular monolith uses an embedded GraphQL gateway and enforced module boundaries without introducing distributed operations before they are justified.
PostgreSQL is authoritative. Durable jobs and a transactional outbox carry asynchronous work where delivery affects correctness.
Native OIDC and PKCE sessions sit behind a provider-neutral authorization boundary, with customer and operator trust treated as separate concerns.
A separate XMPP data plane owns protocol state and routes OMEMO-encrypted private content while the application remains the authorization control plane.
Object access is designed around application-owned authorization and short-lived signed operations rather than public administrative access.
Backend, messaging, Android, identity and infrastructure, and static web each have release gates suited to their distinct risks.
Provisioning, guest configuration, process orchestration, and application promotion have explicit ownership boundaries so one tool does not silently control every layer.
OpenTelemetry, Alloy, Loki, Tempo, Prometheus, and Grafana provide correlated, content-minimized signals across requests and background work.
Selected architecture
This selected logical view shows responsibility and information flow. Physical topology, addressing, administrative paths, and security-sensitive configuration are deliberately omitted.
Domain authorization and client projections
Protocol state, ciphertext routing, and archive mechanics
Domain boundaries are enforced in code without paying the operational cost of a distributed system before scale, isolation, or ownership provides a reason to extract them.
The application decides who may connect and communicate; the XMPP service owns connection, protocol, routing, and encrypted archive mechanics. Idempotent commands, durable outbox delivery, and reconciliation repair drift between systems that do not share a transaction.
Release & delivery
Release authority is cumulative: reviewed source becomes an identified artifact, then a controlled activation, then functional evidence. Successful deployment is technical evidence—not automatic approval for public rollout.
A release begins with a clean reviewed commit, locked dependencies, generated-contract checks, and repository quality gates.
Backend images move by immutable digest. Mobile candidates carry signer, version, source, and hash evidence without placing secrets in the release record.
The release contract requires data compatibility, recovery evidence, environment configuration, migrations, health, and a stability interval to be checked before acceptance.
Acceptance exercises authentication, authorized API behaviour, background delivery, messaging, and affected client journeys to verify more than process health.
Runtime rollback selects a previous compatible artifact. Database migrations are forward-only, so schema changes preserve a compatibility window and use roll-forward recovery where reversal would be unsafe. Android correction normally requires a new, higher-version build rather than a remote downgrade.
Privacy-aware observability
Investigation begins with an opaque correlation identifier and follows work across the edge, API, database or outbound dependency, outbox publication, and background delivery.
Logs record allowlisted outcomes. Traces explain timing and causality. Metrics describe bounded system health. A transport-level success can still contain a GraphQL operational error, so both layers are measured.
Request bodies, GraphQL variables, credentials, message text, profile data, and other personal content are excluded from logs and span attributes. Business identifiers do not become metric labels. No-work jobs and successful health probes use traces and metrics without producing repetitive outcome logs.
Asynchronous work preserves correlation across producer and consumer spans. Collection and retention are bounded, dashboards remain on a private operator surface, and the application continues operating if telemetry is impaired, with bounded local logging as the first fallback.
Operational lessons
These lessons are generalized from operated infrastructure. Identifying topology, incident dates, durations, and internal access details have been removed.
A service can report that it is running while no longer listening where a dependent system needs it. Readiness must validate the path that is actually used.
Proxy and firewall rules should use captured, verified source behaviour. Network names and assumed gateway paths are not evidence, especially when forwarded identity affects authorization or audit records.
A hard network mount combined with asymmetric routing can strand writes and prevent a clean shutdown. Route symmetry, timeout behaviour, and recovery need to be tested as one system.
For encrypted virtual infrastructure, one copied security device is not an independent recovery plan. Firmware state, machine configuration, encrypted data, headers, and offline recovery material must be captured and exercised together.
Selected architectural decisions
Each decision records the constraint, the chosen boundary, its cost, and the evidence that would justify revisiting it.
A current practice
Operating a platform with unclear release, recovery, or observability boundaries?
Request an infrastructure review