QueueTip.io

SYS.ONLINE

> CLASSIFICATION: SOCIAL RADIO PLATFORM

> STATUS: ONLINE

>_ SYSTEM_STATUS: ONLINE

>_ IDENTIFIER: QUEUETIP_IO

>_ CLASSIFICATION: SOCIAL_RADIO_PLATFORM

[INIT_LOGGING]
TIMESTAMP: 2019-01-01
USER_CLEARANCE: ROOT
ACTION: EXPORT_MISSION_REPORT

>_ OVERVIEW

[SYS_MSG] INITIATING PRODUCT RECONNAISSANCE... [STATUS] LIVE AT QUEUETIP.IO

QueueTip is social radio — an independent product designed, built, and operated end to end. Every user has exactly one queue, hard-capped at 30 tracks. Friends drop tracks into each other's queues, with an optional message attached — immediacy through arbitrary limitation, the same design instinct as original Twitter. Queues update in real time for everyone watching: tune into a friend's queue and you hear what they hear, as they hear it. Playback runs in each listener's own browser via YouTube IFrame embeds — no audio hosting, no licensing quagmire, just the network effect of shared taste.

[EXTERNAL_LINK] TUNE_IN: queuetip.io


>_ ARCHITECTURE

[MODULE_LOAD] GO_1.23 // gRPC // GQLGEN // POSTGRES [STATUS] MICROSERVICES ONLINE...

  • GO_MICROSERVICES: Event-driven Go monorepo. A queue gRPC service owns queues, tracks, and plays; a user gRPC service owns users, bcrypt auth, friendships, and public handles — each backed by its own Postgres database (Bun ORM, idempotent migrations).
  • GRAPHQL_GATEWAY: A gqlgen gateway exposes queries, mutations, and websocket subscriptions to the frontend, talking gRPC to the services behind it. HS256 JWT auth, strict resolver-level ACL — friends write to your queue, only you press play.
  • EVENT_STREAMING: Queue mutations publish to Redpanda (Kafka-API, franz-go) and fan out to every watching client — a track landing in your queue appears live, no refresh. Publishing discipline enforced at the repository layer: only fully-reloaded queue state ever hits the wire.
  • CANONICAL_TRACK_CATALOG: One track model keyed on ISRC, enriched across YouTube, Spotify, and Apple Music. Provider fan-out search with ISRC dedupe, paste-a-link resolution, quota-aware caching, and scheduled sweep/janitor jobs that keep metadata fresh.

>_ REALTIME_FRONTEND

[MODULE_LOAD] REACT_19 // TYPESCRIPT // REDUX_SAGA // VITE [STATUS] STREAMING TO BROWSER...

  • SAGA_EVENT_CHANNELS: GraphQL websocket subscriptions wrapped in redux-saga eventChannels — one channel per tuned-in queue — feeding store updates as plays happen.
  • PERSISTENT_PLAYER: A single YouTube player owned by the player saga, living outside the router. Playback follows the tuned-in queue across navigation; guests listen along via a local cursor without ever mutating the owner's queue state.
  • SOCIAL_GRAPH: Handle-based friend search, directed friendship rows with auto-accept on reverse-pending, public/private queue visibility — and a rotating carousel of friend queues to tune into.

>_ PLATFORM_&_OPS

[MODULE_LOAD] RAILWAY // CADDY // DOCKER // PLAYWRIGHT [STATUS] INFRASTRUCTURE DECLARED...

  • INFRASTRUCTURE_AS_CODE: Seven Railway resources — Postgres, Redpanda, migrate job, queue, user, graphql, web — declared in Railway's native TypeScript IaC. Separate production and dev environments driven from one config; Caddy edge gateway as the single public entrypoint.
  • OBSERVABILITY: A dedicated dashboard service surfaces the job ledger (enrichment sweeps, metadata janitor, WEFUNK radio sync) over authenticated HTTP.
  • QUALITY_GATES: Vendored Go deps for hermetic builds, sqlmock/httptest unit tests, dockerised integration suites, and a full Playwright e2e stack gating every change.

>_ VISUAL_RECORD

[SYS_MSG] EXHIBITS RETRIEVED FROM LIVE PRODUCTION ENVIRONMENT...

QueueTip — public queues, tune in to what everyone else is spinning

QueueTip — live queue view with now playing and play history

QueueTip — add a track: provider search with the 30-track cap on display


[SYS_MSG] REPORT COMPLETE. [SYS_MSG] TERMINAL DISCONNECTING... CONNECTION TERMINATED.