Inspiration

Family history is rarely a clean collection of names and dates. It is made from relationships, memories, records, conflicting accounts, missing information, and stories passed between generations. I wanted to create a private workspace that could preserve those connections without pretending that every claim is equally certain or fully resolved.

Lineage Nook was designed as a place where people can map family relationships, preserve supporting sources, distinguish evidence from interpretation, and carry family knowledge forward without flattening it into a simple family tree.

What it does

Lineage Nook helps users:

  • Create and organize people and family records
  • Map relationships across generations
  • Preserve claims alongside their supporting sources
  • Explore lineage information through a visual relationship graph
  • Keep separate family trees and user records securely isolated
  • Export structured lineage information for long-term preservation

How I built it

I built Lineage Nook with Codex through a sustained, repository-based development session. I provided the product intent, privacy requirements, decision boundaries, and approval gates while Codex inspected the existing application, implemented the feature, ran tests, documented evidence, and stopped whenever a new authorization or verification boundary appeared.

The project uses:

  • React and TypeScript for the interface
  • Supabase and PostgreSQL for authentication and data storage
  • Row-level security and scoped database privileges for user isolation
  • Deterministic exports for portable lineage records
  • Automated tests, type checking, production builds, and browser verification
  • Git commits and an evidence ledger to preserve a traceable build history

Challenges

The hardest part was not drawing a family tree. It was proving that one user's lineage information could never be accessed, modified, or connected by another user.

During development, live security testing exposed database privileges that could bypass the intended isolation model. The build stopped, hardened those privileges, and created a two-user regression test to verify cross-user and cross-tree boundaries. Several test-harness assumptions also failed before the actual assertions could run, including PostgreSQL ownership constraints and browser-harness compatibility issues. Each failure was preserved as evidence, repaired narrowly, and retested rather than treated as proof that the underlying feature worked.

Browser verification also exposed ambiguous accessibility queries where multiple headings matched the same test selector. That became another useful reminder that test failures can reveal assumptions in the verification method, not only defects in the product.

What I learned

I learned that building with an AI coding agent works best when autonomy is paired with explicit boundaries, evidence, and verification. Codex was most useful not as a one-shot code generator, but as a development collaborator that could inspect the repository, implement changes, test its own work, report uncertainty, and stop when it reached a decision that belonged to me.

I also learned that privacy requires more than enabling row-level security. Policies, grants, ownership, foreign keys, functions, test identities, rollback behavior, and negative cross-user tests all have to agree.

Most importantly, I learned that lineage software should preserve uncertainty rather than erase it. A trustworthy family-history tool should show not only what is believed, but why it is believed, where the information came from, and what remains unresolved.

Built With

Share this project:

Updates