Skip to content

feat: blockchain-backed collections linked to Stellar wallet#110

Open
dotmantissa wants to merge 1 commit into
SudiptaPaul-31:mainfrom
dotmantissa:main
Open

feat: blockchain-backed collections linked to Stellar wallet#110
dotmantissa wants to merge 1 commit into
SudiptaPaul-31:mainfrom
dotmantissa:main

Conversation

@dotmantissa

@dotmantissa dotmantissa commented Jun 24, 2026

Copy link
Copy Markdown

Closes #107


Users can now organise snippets into named collections. Each collection is owned by a Stellar wallet address and anchored on the Stellar Testnet at creation time via a manageData transaction, giving verifiable and immutable on-chain provenance.

What was added:

  • Database migration (scripts/add-collections.sql): collections table with on-chain fields and a collection_snippets join table.

  • Stellar integration (lib/stellar.ts): submitCollectionToStellar hashes collection metadata and submits a manageData operation; falls back to a deterministic mock when no secret key is configured, keeping dev/test environments working without a live Stellar account.

  • Collection layer (app/api/collections/): validator (Zod), repository (raw SQL via Neon), and service with full ownership enforcement. Private collections are only visible to their owner; public ones are open to everyone.

  • REST API: GET/POST /api/collections GET/PATCH/DELETE /api/collections/[id] GET/POST/DELETE /api/collections/[id]/snippets All mutation endpoints require an x-wallet-address header and reject non-owners with a 403.

  • UI: CollectionBadge shows owner wallet and a link to the Stellar Explorer transaction. CollectionManager (dialog) lets connected users create collections and add snippets from anywhere in the app. /collections page provides a full management view with tabs for "My Collections" and "Public", collection detail panel, and per-snippet remove action.

  • Sidebar updated with a Collections navigation entry.

  • Unit tests (lib/collection.service.test.ts): 20 cases covering all service methods, including ownership enforcement, access control for private collections, and error wrapping.

Users can now organise snippets into named collections. Each collection
is owned by a Stellar wallet address and anchored on the Stellar Testnet
at creation time via a manageData transaction, giving verifiable and
immutable on-chain provenance.

What was added:

- Database migration (scripts/add-collections.sql): collections table
  with on-chain fields and a collection_snippets join table.

- Stellar integration (lib/stellar.ts): submitCollectionToStellar
  hashes collection metadata and submits a manageData operation; falls
  back to a deterministic mock when no secret key is configured, keeping
  dev/test environments working without a live Stellar account.

- Collection layer (app/api/collections/): validator (Zod), repository
  (raw SQL via Neon), and service with full ownership enforcement.
  Private collections are only visible to their owner; public ones are
  open to everyone.

- REST API:
    GET/POST  /api/collections
    GET/PATCH/DELETE /api/collections/[id]
    GET/POST/DELETE  /api/collections/[id]/snippets
  All mutation endpoints require an x-wallet-address header and reject
  non-owners with a 403.

- UI: CollectionBadge shows owner wallet and a link to the Stellar
  Explorer transaction. CollectionManager (dialog) lets connected users
  create collections and add snippets from anywhere in the app.
  /collections page provides a full management view with tabs for "My
  Collections" and "Public", collection detail panel, and per-snippet
  remove action.

- Sidebar updated with a Collections navigation entry.

- Unit tests (lib/collection.service.test.ts): 20 cases covering all
  service methods, including ownership enforcement, access control for
  private collections, and error wrapping.
@vercel

vercel Bot commented Jun 24, 2026

Copy link
Copy Markdown

@dotmantissa is attempting to deploy a commit to the Sudipta 's projects Team on Vercel.

A member of the Team first needs to authorize it.

@drips-wave

drips-wave Bot commented Jun 24, 2026

Copy link
Copy Markdown

@dotmantissa Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

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.

On-Chain Snippet Collection System

1 participant