say hello

VibeGrid

Daily social crew game · Jun–Aug 2026 · Public repo

A daily asynchronous crew game: make one four-fragment vibe card, judge yesterday's cards blind, then reveal authors and votes.

VibeGrid private crew ritual showing a four-fragment vibe card
The crew ritual card, from the current build.

What it is

VibeGrid gives a crew one creative constraint per day. Each person makes a named four-fragment card, judges the previous day's cards without author labels, and returns for the reveal. The suspense comes from interpretation and recognition, not from recovering a concealed answer.

The public homepage is a complete practice round, not a signup gate. Durable crews remain private, and the interface reveals only what the current stage and membership allow.

The loop it has to make believable

  1. 01

    Reframed the product from a solitary answer-key puzzle into a private, asynchronous social ritual where the crew's interpretations are the point.

  2. 02

    Made Go and Postgres authoritative for membership, stage timing, one-card and one-ballot limits, no-self-vote rules, ties, and result thresholds.

How it’s built

The Go service owns the social contract: immutable dated boards, authorization, submission and ballot transactions, staged projections, privacy, identity, and replay semantics. Postgres constraints reinforce same-round targets, one-card and one-vote rules, and no-self-vote behavior.

The exported Next.js frontend and migrations ship inside one non-root Go container. Operations include structured logs, health and readiness probes, bounded metrics, graceful shutdown, retention cleanup, and explicit production guardrails.

Architecture

Board state
An immutable dated palette whose row count freezes from the crew-size snapshot
Make
Exactly four fragments and one title, with one card allowed per member and board
Judge
Eligible makers see authors hidden and cast one non-self ballot
Reveal
Authors and votes appear only in the result stage; ties remain ties
Identity
Revocable hash-only browser bearers map to stable crew identities across leave and rejoin
Runtime
A Go binary embeds the exported Next.js frontend and migrations; Postgres owns the durable crew path

What has to hold up

  • Used client replay IDs, database uniqueness, and stable member identities so timed-out retries or membership churn cannot reset product rules.
  • Separated public practice from durable crews and added hash-only revocable sessions, CSRF protection, rate limits, health/readiness probes, metrics, and runbooks.

How I would present it

I would start with the three-day interaction and show how one card changes across make, blind judge, and reveal. Then I would trace the same rule through UI projection, Go authorization, the transaction, and the database constraint.

The strongest engineering discussion is about state that must survive retries and membership churn without leaking authorship early or inventing a result for a quiet round.

Proof

The strongest proof is the product contract: staged disclosure, transaction-owned authorship and voting, replay-safe retries, stable identity, and an honest public-practice boundary.

VerifyRepository, checks, stack, status
  1. 01

    Open the GitHub repo and play the browser-only practice round described in the README.

  2. 02

    Read the product vision and decision register for the make, judge, reveal contract and deliberate non-goals.

  3. 03

    Inspect the round handlers, transactional store, stable-identity migration, and stage-specific privacy projections.

  4. 04

    Run the documented service, security, Postgres, build, and smoke checks before making deployment claims.

Role
Product mechanic, staged interaction, transactional rules, identity, privacy, and operations
Scope
Private daily crew ritual with public browser-only practice
Proof
Product vision, decision register, service tests, migrations, smoke script, and runbooks
Stack
Go, Next.js, React, TypeScript, PostgreSQL, pgx, Tailwind CSS
Loop
Make → judge → reveal
Crew size
1–20 members
Retries
Idempotent writes
Runtime
Go + Postgres