Skip to content

Zero-config dev boot + centralized branding (TEC-234, 235, 237, 231)#50

Merged
sethdavis512 merged 7 commits into
mainfrom
claude/repo-dev-experience-assessment-gqn02q
Jul 8, 2026
Merged

Zero-config dev boot + centralized branding (TEC-234, 235, 237, 231)#50
sethdavis512 merged 7 commits into
mainfrom
claude/repo-dev-experience-assessment-gqn02q

Conversation

@sethdavis512

@sethdavis512 sethdavis512 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Combs through the Iridium Linear backlog, verifies each ticket against the current code, and fixes the valid, tightly scoped ones. One commit per issue.

Fixes

TEC-234 — DEV_FALLBACKS should match docker-compose defaults

env.server.ts substituted a dead placeholder DATABASE_URL that could never reach the Docker database, so the "app always boots in dev" guarantee produced a booted app where every page errored. Points the DB fallbacks at the docker-compose.dev.yml defaults so a fresh clone + bun run docker:up + bun run dev connects with zero config. The dev banner still renders (its effect text was updated to match).
Closes TEC-234

TEC-235 — prisma generate should not require DATABASE_URL locally

prisma.config.ts resolved env('DATABASE_URL') eagerly at import, so bunx --bun prisma generate failed with PrismaConfigEnvError on a fresh clone. Resolves process.env.DATABASE_URL ourselves with the docker-compose default fallback. Verified: config now loads with DATABASE_URL unset.
Closes TEC-235

TEC-237 — Pin the compose project name so containers survive repo renames

Adds a top-level name: iridium to docker-compose.dev.yml for deterministic container/volume names, and --remove-orphans to docker:down/docker:nuke.
Closes TEC-237

TEC-231 — Centralize app branding in a single APP_NAME config

Adds app/config.ts exporting APP_NAME + APP_TAGLINE (client-safe) and consumes it from every brand surface: per-route <title> tags and meta/OgMeta descriptions, the SiteHeader brand link, the SiteFooter tagline, both react-email templates, the reset-email subject, and the EMAIL_FROM default. Values are unchanged, so rendered output — and the E2E specs asserting it — stay identical; rebranding is now a one-line change. Deferred as higher-risk follow-ups: the iridium_theme cookie name and the @iridium.dev/.test seed/test email domains.
Closes TEC-231

Triage of the rest of the backlog (verified, not fixed here)

Not applicable to Iridium — imported from a derived app (the-writing-room):

  • TEC-177 references 10 sub-agents (RelationshipManager, JournalCoach, …) that don't exist — Iridium has one agent, "Iris".
  • TEC-179 / TEC-180 reference safe-area-inset overflow, but there's no safe-area-inset CSS anywhere to fix.
  • TEC-178 / TEC-181 / TEC-182 / TEC-184 are past-tense chat/mobile-layout polish descriptions that need visual verification; left for a rendered pass.

Valid but out of scope for a safe, unrendered PR (large refactor / migration / design decision):

  • TEC-230 make the AI chat stack cleanly removable (~50 files).
  • TEC-238 ship USER/ADMIN only, EDITOR opt-in (Prisma enum + migration).
  • TEC-232 / TEC-233 dedupe architecture docs / mark demo features.
  • TEC-236 isolate E2E dev-server caches (needs an E2E run to verify).
  • TEC-239 single env manifest for .env.example ↔ schema (needs a design decision).

Validation

  • 97 unit tests pass; lint and Prettier clean repo-wide. Lint passing with zero unused imports confirms every APP_NAME import is wired to a real usage.
  • The one failing unit suite (session.server.test.ts) and full typecheck need the generated Prisma client, and binaries.prisma.sh is blocked in this environment — CI runs them where the binaries are reachable.

🤖 Generated with Claude Code

https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW

claude added 4 commits July 6, 2026 05:37
Without a .env, env.server.ts substituted a dead placeholder DATABASE_URL that
could never reach the Docker database, so the "app always boots in dev"
guarantee produced a booted app where every page errored. Point the database
fallbacks at the docker-compose.dev.yml defaults
(postgres:postgres@localhost:5432/iridium and 5433/voltagent) so a fresh clone
+ `bun run docker:up` + `bun run dev` works with zero configuration. The dev
banner still shows so it stays obvious you're on fallback values.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
prisma.config.ts resolved env('DATABASE_URL') eagerly at import time, so
`bunx --bun prisma generate` failed with PrismaConfigEnvError on a fresh clone
with no .env — even though generate is pure codegen that never connects.
Resolve process.env.DATABASE_URL ourselves with the docker-compose default
fallback so generate (and migrate/seed against a running docker:up) work with
zero env. Production always sets DATABASE_URL, so the fallback never runs there.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
Docker Compose derived the project name from the directory, so cloning or
renaming the repo orphaned the old containers/volumes (iridium-postgres-1,
iridium_pgdata) — invisible to `docker compose down`/`docker:nuke` and left to
be removed by hand. Add an explicit top-level `name: iridium` so container and
volume names are deterministic, and add `--remove-orphans` to docker:down and
docker:nuke so removing a service also cleans up its container.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
Rebranding a derived app required editing "Iridium" in 20+ spots. Add
app/config.ts exporting APP_NAME and APP_TAGLINE (client-safe, no server
imports) and consume it from every brand surface: per-route <title> tags and
meta/OgMeta descriptions, the SiteHeader brand link, the SiteFooter tagline,
both react-email templates, the reset-email subject, and the EMAIL_FROM
default. Values are unchanged ("Iridium"), so rendered output — and the E2E
specs asserting it — stay identical; rebranding is now a one-line change.

Left as follow-ups (higher risk / separate concern): the iridium_theme cookie
name (changing it invalidates existing cookies) and the @iridium.dev/.test
seed/test email domains.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
@sethdavis512 sethdavis512 changed the title Zero-config dev boot fixes (TEC-234, TEC-235, TEC-237) Zero-config dev boot + centralized branding (TEC-234, 235, 237, 231) Jul 6, 2026
claude added 3 commits July 6, 2026 16:39
…t doc

.claude/agents/staff-engineer.md hardcoded an absolute agent-memory path
(/Users/seth/repositories/iridium/...) that breaks the moment the repo is
cloned or renamed. Make it repo-root-relative. This is the concrete
"remove hardcoded absolute repo paths from agent docs" slice of TEC-232;
the broader doc-dedup (single source of truth) is left for a follow-up.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
…enshots

Every UI change ended with the human as the verifier: agents reported "done"
after a successful edit and the user ran the app and screenshotted it
themselves. The repo already has the machinery (visual inventory helpers,
Playwright fixtures, chat mocks) — this skill makes agents use it: boot on a
dedicated port (7780), interact with the change via a throwaway spec, capture
a light/dark × desktop/phone screenshot matrix, assert zero console errors,
run the surface's e2e + visual guardrails, and hand back evidence instead of
claims.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
The backlog accumulated tickets that don't apply to this repo (imported from
a derived app) and past-tense tickets describing finished work; nothing
checked new tickets against the codebase until implementation time. This
skill encodes the verify-before-fix sweep: fetch backlog/unstarted Iridium
issues, skip ones already bearing a triage comment, grep the code to confirm
or refute each ticket's checkable claims, classify (valid-safe /
valid-needs-render / valid-large / already-done / not-applicable / unclear),
and leave an evidence-backed comment. Triage never fixes and never changes
state unless explicitly asked. Runnable on demand or on a schedule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153FGSLfBe9tV84usFroCVW
@sethdavis512 sethdavis512 merged commit f171ae0 into main Jul 8, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants