Building the “Save to My Library” Function at Toppertunity

This week we built something small.

A button.

But underneath that button is identity, memory, and agency.

We added a “Save to My Library” function to Toppertunity. On the
surface, it allows a logged-in user to save a resource. Underneath, it
represents something much larger: the move from consuming content to
curating meaning.

This post captures what we were trying to do, why it matters, how we
built it, what broke along the way, and where it’s headed next.

1)  What We’re Trying to Do (And Why It Matters)

Toppertunity exists to create a psychologically safe place for capable
entrepreneurs to slow down, name what matters, and make one or two
better next decisions — without being told who to become or how to run
their business.

The Save function is not about bookmarking.

It’s about intentional curation.

Entrepreneurs are flooded with information. Podcasts. Articles.
Frameworks. Advice. The problem is not scarcity of ideas — it’s lack of
structure for reflection.

By allowing someone to build a personal, curated, and eventually
shareable collection of resources, we’re helping them move: - From
information → to intention - From consumption → to curation - From
overwhelm → to ownership

A personal library becomes a visible trace of how someone thinks — and
who they are becoming.

How This Serves Our Community (By Avatar)

Small Business Owners
For owners navigating growth, relief, uncertainty, or transition, a
curated library becomes a thinking tool. It’s a way to gather what
resonates and return to it intentionally. Over time, it becomes a
personal operating manual.

Educators
For educators teaching entrepreneurship, reflection is often harder to
teach than mechanics. A saved collection shows discernment. It models
metacognition. It allows assignment and discussion rooted in personal
choice.

Students
Students rarely have a place to build intellectual identity before
building a résumé. A curated library allows them to signal curiosity,
pattern recognition, and depth — not just credentials.

Advisors
Advisors and coaches can use a client’s saved resources as a diagnostic
lens. What someone saves reveals what they’re wrestling with. The
library becomes a conversation starter.

Bankers and Investors
Capital providers evaluate judgment as much as numbers. A founder’s
curated thinking can reveal maturity, discipline, and philosophical
grounding in ways a pitch deck cannot.

The Problem We Needed to Solve

Shopify does not natively provide a “Save to personal library” system
for metaobjects.

We needed: - Customer-specific storage - Secure authenticated writes -
No additional login friction - Deduplication logic - Expandable
architecture for future features

We chose: - A Shopify App Proxy endpoint - A Cloudflare Worker to
process requests - Customer metafields for storage

Initially, we attempted to store saved resources as a list metafield.
Shopify returned a type mismatch error because the metafield definition
was configured as single_line_text_field.

We adapted.

Version 1 stores handles as a pipe-delimited string inside a
single_line_text_field metafield.

It’s simple. It works. It’s expandable.

Technical Challenges Along the Way

Several things broke before it worked.

-   Duplicate route blocks caused unexpected execution paths.
-   ownerId scoping errors surfaced in TypeScript.
-   Metafield type mismatches (list vs single_line_text_field) caused
    GraphQL userErrors.
-   We added structured logging inside the Cloudflare Worker to inspect:
    -   Endpoint
    -   Variables
    -   HTTP status
    -   Shopify response body preview
    -   userErrors

The breakthrough moment came when logs showed:

metafield: null
→ meaning no prior value existed
→ meaning we could safely initialize the string

When the metafieldsSet mutation returned without userErrors, the save
worked.

Sometimes entrepreneurship looks like strategy.

Sometimes it looks like reading logs carefully.

Where This Is Going

This is Version 1.

Future directions include:

-   Migrating to a true list metafield definition
-   Storing resource IDs instead of handles
-   Building a “My Library” interface page
-   Making libraries optionally shareable
-   Adding engagement scoring and weighted discovery
-   AI-assisted recommendations based on saved resources
-   Cross-avatar insights

The goal is not saving content.

The goal is building reflective infrastructure.

A Request for Feedback

We’d love your thoughts.

-   Would you use a personal library like this?
-   Should saved resources be private, public, or selectively shareable?
-   How should a curated library be surfaced or visualized?
-   Would you create a public Toppertunity collection others could learn
    from?

This week we built a button.

Underneath it, we’re building something much larger: a system that helps
people move from reacting to information toward curating intention.

That feels aligned with our mission.

And we’re just getting started.

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.