Skip to content

Conversation

@aguilar1x
Copy link
Collaborator

@aguilar1x aguilar1x commented Jan 28, 2026

Summary

  • Refactor NFT metadata attributes from Vec<String> to Vec<NFTAttribute> to comply with the SEP-0050 Non-Fungible Metadata JSON Schema
  • Add NFTAttribute struct with trait_type, value, display_type, and max_value fields matching the SEP-0050 specification
  • Update the reputation contract's mirrored types and level attribute helpers to use the new structured format

Motivation

The previous attribute format used plain strings (ej, "level:gold", "badge:early_supporter"), which is not compatible with the SEP-0050 standard. Marketplaces and external tools that follow SEP-0050 expect attributes as structured objects:

{
  "trait_type": "level",
  "value": "gold",
  "display_type": "string"
}

Changes

apps/contract/contracts/nft-kindfi/src/types.rs

  • Added NFTAttribute struct with fields: trait_type, value, display_type (optional), max_value (optional)
  • Updated NFTMetadata.attributes from Vec<String> to Vec<NFTAttribute>

apps/contract/contracts/nft-kindfi/src/test.rs

  • Updated create_metadata helper and test_update_metadata to construct NFTAttribute instances

apps/contract/contracts/reputation/src/nft_client.rs

  • Added mirrored NFTAttribute struct for cross-contract call compatibility
  • Refactored build_level_attribute() to return NFTAttribute instead of String
  • Simplified is_level_attribute() to check trait_type field instead of comparing full strings
  • Updated update_attributes_with_level() to operate on Vec<NFTAttribute>
  • Updated all related tests to use the new format

Test plan

  • cargo test --package nft-kindfi — 18 tests passed
  • cargo test --package reputation — 33 tests passed

Summary by CodeRabbit

  • New Features

    • Implemented SEP-0050 standard for NFT attributes with enriched metadata structure. Attributes now support detailed trait information including display formatting and maximum value constraints, enabling more expressive NFT metadata representation.
  • Tests

    • Updated test cases across contracts to validate new attribute structure and ensure SEP-0050 compliance.

✏️ Tip: You can customize this high-level summary in your review settings.

Replace Vec<String> attributes with Vec<NFTAttribute> using structured
fields (trait_type, value, display_type, max_value) to comply with the
SEP-0050 Non-Fungible Metadata JSON Schema.
Adapt all test helpers and test cases to use the new SEP-0050 compliant
NFTAttribute struct instead of plain strings for metadata attributes.
Refactor NFTMetadata mirror and level attribute helpers to use the new
NFTAttribute struct. Update cross-contract call types and all related
tests for SEP-0050 compliance.
@aguilar1x aguilar1x requested a review from Bran18 January 28, 2026 17:21
@aguilar1x aguilar1x self-assigned this Jan 28, 2026
@vercel
Copy link
Contributor

vercel bot commented Jan 28, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
kindfi Ready Ready Preview, Comment Jan 28, 2026 5:22pm

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 28, 2026

Walkthrough

This change implements SEP-0050 compliant NFT attributes by replacing string-based representation with a structured NFTAttribute type. The refactoring updates metadata handling across NFT contract types, metadata definitions, and attribute management functions while maintaining existing test coverage.

Changes

Cohort / File(s) Summary
Type Definitions
apps/contract/contracts/nft-kindfi/src/types.rs, apps/contract/contracts/reputation/src/nft_client.rs
Added new public NFTAttribute struct with fields for trait_type, value, display_type, and max_value. Updated NFTMetadata.attributes from Vec<String> to Vec<NFTAttribute> to align with SEP-0050 schema.
Attribute Helpers
apps/contract/contracts/reputation/src/nft_client.rs
Introduced build_level_attribute() to construct SEP-0050 compliant level attributes. Added internal helpers level_to_value() and is_level_attribute(). Refactored update_attributes_with_level() to operate on Vec<NFTAttribute> with updated signature.
Test Updates
apps/contract/contracts/nft-kindfi/src/test.rs
Updated test metadata construction to use NFTAttribute structs instead of plain strings. Modified TestEnv::create_metadata() and test_update_metadata() to reflect new attribute structure with optional display_type and max_value fields.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

enhancement, contract

Suggested reviewers

  • Bran18

Poem

✨ Attributes now structured bright,
SEP-0050 shining in the light,
From strings to types, we've made the change,
Metadata now with proper range,
The NFT world feels more aligned! 🎨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: refactoring NFT metadata to use SEP-0050 compatible structures across the nft-kindfi and reputation contracts.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@aguilar1x aguilar1x changed the title feat: refactor nft kindfi with SEP-0050 feat: refactor nft-kindfi with SEP-0050 Jan 28, 2026
@aguilar1x aguilar1x changed the title feat: refactor nft-kindfi with SEP-0050 feat: refactor nft-kindfi with SEP-0050 compatibility Jan 28, 2026
@coderabbitai coderabbitai bot added contract smart contract app related enhancement New feature improvement or request labels Jan 28, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
apps/contract/contracts/nft-kindfi/src/test.rs (1)

211-243: Consider enhancing attribute verification in the test.

The test correctly updates metadata with NFTAttribute instances, including the max_value field which is great for coverage. We could enhance the test by also verifying that the attributes were persisted correctly:

💡 Optional enhancement
     // Verify metadata was updated
     let stored = test.client.get_metadata(&token_id).unwrap();
     assert_eq!(stored.name, String::from_str(&test.env, "Updated Name"));
     assert_eq!(
         stored.description,
         String::from_str(&test.env, "Updated description")
     );
+    // Verify attributes were updated
+    assert_eq!(stored.attributes.len(), 2);
apps/contract/contracts/reputation/src/nft_client.rs (1)

20-41: Intentional type mirroring for cross-contract compatibility.

The duplication of NFTAttribute and NFTMetadata is a necessary pattern for Soroban cross-contract calls. Consider adding a note in the module documentation or a comment linking to the source of truth to help future maintainers keep these types synchronized:

📝 Optional documentation enhancement
 /// NFT attribute following SEP-0050 JSON schema.
-/// Must match the nft-kindfi NFTAttribute structure exactly.
+/// Must match the nft-kindfi NFTAttribute structure exactly.
+/// Source of truth: apps/contract/contracts/nft-kindfi/src/types.rs
 #[contracttype]
 #[derive(Clone, Debug, Eq, PartialEq)]
 pub struct NFTAttribute {
🤖 Fix all issues with AI agents
In `@apps/contract/contracts/nft-kindfi/src/types.rs`:
- Around line 3-26: Fix the minor typos in the NFTAttribute doc comments:
replace "e.j." with "e.g." in the trait_type comment (inside struct
NFTAttribute), and replace both occurrences of "ej." with "e.g." in the value
and display_type comments so all examples use the correct "e.g." convention.

In `@apps/contract/contracts/reputation/src/nft_client.rs`:
- Around line 78-81: The is_level_attribute function currently allocates a new
String on every call via String::from_str(e, LEVEL_TRAIT_TYPE); change the
design to avoid per-iteration allocation by hoisting the comparison string:
either (1) change is_level_attribute signature to accept a &str or &Symbol-like
type (e.g., fn is_level_attribute(attr: &NFTAttribute, target: &str) -> bool)
and compare attr.trait_type == target, or (2) keep the signature but add an
overload/variant that takes a precomputed String (or cached value created once
in update_attributes_with_level) and pass that into is_level_attribute; update
update_attributes_with_level to create the comparison value once and reuse it in
the loop so the allocation isn’t repeated.

Comment on lines +3 to +26
/// NFT attribute following SEP-0050 JSON schema.
/// Represents a single trait/property of the NFT.
///
/// Compatible with the "Non-Fungible Metadata JSON Schema" defined in SEP-0050:
/// ```json
/// {
/// "display_type": "string",
/// "trait_type": "string",
/// "value": "string | number",
/// "max_value": "number (optional)"
/// }
/// ```
#[contracttype]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct NFTAttribute {
/// The type of trait this attribute represents (e.j., "level", "badge", "rarity")
pub trait_type: String,
/// The value of the attribute (ej., "gold", "100", "rare")
pub value: String,
/// Optional display type hint for UIs (ej., "string", "number", "date", "boost_percentage")
pub display_type: Option<String>,
/// Optional maximum value for numeric traits (stored as string for flexibility)
pub max_value: Option<String>,
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Well-structured SEP-0050 compliant attribute type!

The NFTAttribute struct nicely captures the SEP-0050 schema with appropriate use of Option<String> for optional fields. Consider fixing the minor typos in the documentation comments:

  • Line 18: "e.j." → "e.g."
  • Line 20: "ej." → "e.g."
  • Line 22: "ej." → "e.g."
📝 Suggested documentation fixes
 /// NFT attribute following SEP-0050 JSON schema.
 /// Represents a single trait/property of the NFT.
 ///
 /// Compatible with the "Non-Fungible Metadata JSON Schema" defined in SEP-0050:
 /// ```json
 /// {
 ///   "display_type": "string",
 ///   "trait_type": "string",
 ///   "value": "string | number",
 ///   "max_value": "number (optional)"
 /// }
 /// ```
 #[contracttype]
 #[derive(Clone, Debug, Eq, PartialEq)]
 pub struct NFTAttribute {
-    /// The type of trait this attribute represents (e.j., "level", "badge", "rarity")
+    /// The type of trait this attribute represents (e.g., "level", "badge", "rarity")
     pub trait_type: String,
-    /// The value of the attribute (ej., "gold", "100", "rare")
+    /// The value of the attribute (e.g., "gold", "100", "rare")
     pub value: String,
-    /// Optional display type hint for UIs (ej., "string", "number", "date", "boost_percentage")
+    /// Optional display type hint for UIs (e.g., "string", "number", "date", "boost_percentage")
     pub display_type: Option<String>,
     /// Optional maximum value for numeric traits (stored as string for flexibility)
     pub max_value: Option<String>,
 }
🤖 Prompt for AI Agents
In `@apps/contract/contracts/nft-kindfi/src/types.rs` around lines 3 - 26, Fix the
minor typos in the NFTAttribute doc comments: replace "e.j." with "e.g." in the
trait_type comment (inside struct NFTAttribute), and replace both occurrences of
"ej." with "e.g." in the value and display_type comments so all examples use the
correct "e.g." convention.

Copy link
Member

@Bran18 Bran18 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Perfect, this will be super handy once we are on mainnet

@Bran18 Bran18 merged commit 6510eee into develop Jan 28, 2026
3 of 4 checks passed
@Bran18 Bran18 linked an issue Jan 28, 2026 that may be closed by this pull request
5 tasks
Bran18 added a commit that referenced this pull request Feb 5, 2026
* feat: add didit KYC user flow (#768)

* feat: add dididt KYC user flow

* fix: build issues

* fix(auth): add pending role state and fix user signup default role

* chore: generate Supabase types from remote instance

* fix: configure Vercel for monorepo and add Supabase types

* feat: kindfi nft open zeppelin (#769)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: Reputation Contract for NFT Level Management (#773)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: Comprehensive Tests and Integration for NFT & Reputation Contracts (#774)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

* test(reputation): add reputation contract tests

* test(nft): add NFT contract tests

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: Deployment Scripts and Configuration for NFT & Reputation Contracts (#775)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

* test(reputation): add reputation contract tests

* test(nft): add NFT contract tests

* chore: update cargo lock file

* docs: update contracts README

* script: add NFT contract deployment script

* script: add reputation contract deployment script

* chore: add environment example file

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: refactor nft-kindfi with SEP-0050 compatibility (#778)

* feat: add SEP-0050 compliant NFTAttribute struct to nft-kindfi types

Replace Vec<String> attributes with Vec<NFTAttribute> using structured
fields (trait_type, value, display_type, max_value) to comply with the
SEP-0050 Non-Fungible Metadata JSON Schema.

* feat: update nft-kindfi tests to use NFTAttribute struct

Adapt all test helpers and test cases to use the new SEP-0050 compliant
NFTAttribute struct instead of plain strings for metadata attributes.

* feat: update reputation nft_client to SEP-0050 attribute format

Refactor NFTMetadata mirror and level attribute helpers to use the new
NFTAttribute struct. Update cross-contract call types and all related
tests for SEP-0050 compliance.

* fix(kyc): prevent URL params cleanup on failure and add error toasts (#777)

* fix(kyc): prevent URL params cleanup on failure and add error toasts

* refactor(kyc): deduplicate error message string per code review

* fix(kyc): sync with develop and add error logging per code review

* refactor: centralize didit kyc status mapping logic (#779)

* refactor: centralize didit kyc status mapping logic

* refactor: apply code review feedback (arrow functions, type-only imports, and alias paths)

* style(ui): use bg-primary token instead of hex code in progress bar (#780)

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* chore: add vercel skills set for OSS

* fix: add new migration strategy

* feat: add fundation support

* chore: generate Supabase database types using MCP tool

- Generated complete TypeScript types from Supabase database
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add complete Supabase database types

- Generated TypeScript types from Supabase database using MCP tool
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add complete Supabase database types

- Generated TypeScript types from Supabase database using MCP tool
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Matias Aguilar <aaguilar1x@gmail.com>
Co-authored-by: Karen Giannetto <karengiannetto99@gmail.com>
Co-authored-by: Delfina luna Corradini <105253541+delfinacorr@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Bran18 added a commit that referenced this pull request Feb 5, 2026
* feat: add didit KYC user flow (#768)

* feat: add dididt KYC user flow

* fix: build issues

* fix(auth): add pending role state and fix user signup default role

* chore: generate Supabase types from remote instance

* fix: configure Vercel for monorepo and add Supabase types

* feat: kindfi nft open zeppelin (#769)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: Reputation Contract for NFT Level Management (#773)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: Comprehensive Tests and Integration for NFT & Reputation Contracts (#774)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

* test(reputation): add reputation contract tests

* test(nft): add NFT contract tests

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: Deployment Scripts and Configuration for NFT & Reputation Contracts (#775)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

* test(reputation): add reputation contract tests

* test(nft): add NFT contract tests

* chore: update cargo lock file

* docs: update contracts README

* script: add NFT contract deployment script

* script: add reputation contract deployment script

* chore: add environment example file

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: refactor nft-kindfi with SEP-0050 compatibility (#778)

* feat: add SEP-0050 compliant NFTAttribute struct to nft-kindfi types

Replace Vec<String> attributes with Vec<NFTAttribute> using structured
fields (trait_type, value, display_type, max_value) to comply with the
SEP-0050 Non-Fungible Metadata JSON Schema.

* feat: update nft-kindfi tests to use NFTAttribute struct

Adapt all test helpers and test cases to use the new SEP-0050 compliant
NFTAttribute struct instead of plain strings for metadata attributes.

* feat: update reputation nft_client to SEP-0050 attribute format

Refactor NFTMetadata mirror and level attribute helpers to use the new
NFTAttribute struct. Update cross-contract call types and all related
tests for SEP-0050 compliance.

* fix(kyc): prevent URL params cleanup on failure and add error toasts (#777)

* fix(kyc): prevent URL params cleanup on failure and add error toasts

* refactor(kyc): deduplicate error message string per code review

* fix(kyc): sync with develop and add error logging per code review

* refactor: centralize didit kyc status mapping logic (#779)

* refactor: centralize didit kyc status mapping logic

* refactor: apply code review feedback (arrow functions, type-only imports, and alias paths)

* style(ui): use bg-primary token instead of hex code in progress bar (#780)

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* chore: add vercel skills set for OSS

* fix: add new migration strategy

* feat: add fundation support

* chore: generate Supabase database types using MCP tool

- Generated complete TypeScript types from Supabase database
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add complete Supabase database types

- Generated TypeScript types from Supabase database using MCP tool
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add complete Supabase database types

- Generated TypeScript types from Supabase database using MCP tool
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix: WebAuthn cross environments

---------

Co-authored-by: Matias Aguilar <aaguilar1x@gmail.com>
Co-authored-by: Karen Giannetto <karengiannetto99@gmail.com>
Co-authored-by: Delfina luna Corradini <105253541+delfinacorr@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Bran18 added a commit that referenced this pull request Feb 5, 2026
* feat: add didit KYC user flow (#768)

* feat: add dididt KYC user flow

* fix: build issues

* fix(auth): add pending role state and fix user signup default role

* chore: generate Supabase types from remote instance

* fix: configure Vercel for monorepo and add Supabase types

* feat: kindfi nft open zeppelin (#769)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: Reputation Contract for NFT Level Management (#773)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: Comprehensive Tests and Integration for NFT & Reputation Contracts (#774)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

* test(reputation): add reputation contract tests

* test(nft): add NFT contract tests

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: Deployment Scripts and Configuration for NFT & Reputation Contracts (#775)

* feat: add KindFi NFT contract structure and types

- Add Cargo.toml for nft-kindfi contract with OpenZeppelin dependencies
- Add types.rs with NFTMetadata struct and StorageKey enum
- Add errors.rs with custom error definitions
- Add events.rs with metadata update events

* feat: implement KindFi NFT core functionality

- Add lib.rs with main contract implementing NonFungibleToken, AccessControl, and custom metadata functions
- Add metadata.rs for on-chain metadata storage and retrieval
- Add mint.rs for sequential token ID minting with metadata
- Add burn.rs for token burning functionality
- Implement role-based access control (minter, burner, metadata_manager)
- Add OpenZeppelin Stellar Contracts integration

* fix: update workspace members for compilation

- Comment out non-existent contract members to allow compilation
- Add nft-kindfi to implemented contracts
- Reorganize workspace members with clear sections

* chore: update Cargo.lock with new contract dependencies

* feat: update to OpenZeppelin Stellar Contracts v0.6.0

- Update soroban-sdk from 22.0.6 to 23.4.0
- Update all OpenZeppelin dependencies from v0.3.0 to v0.6.0
- Restructure dependencies: stellar-access-control → stellar-access, stellar-non-fungible → stellar-tokens

* feat: update nft-kindfi dependencies for v0.6.0

- Update contract dependencies to use new package structure
- stellar-access-control → stellar-access
- stellar-access-control-macros → stellar-macros
- stellar-non-fungible → stellar-tokens

* refactor: update imports for OpenZeppelin v0.6.0

- Update stellar_access_control imports to stellar_access::access_control
- Update stellar_non_fungible imports to stellar_tokens::non_fungible
- Update stellar_access_control_macros to stellar_macros
- Fix AccessControl trait method signatures to match v0.6.0 API

* chore: kindfi information in the workspace.package and comments added in members

* fix: target changed to wasm32v1-none and leaving necessary components

* chore: Add additional information about kindfi to contract cargo.toml and change crate-type to just (cdylib)

* fix: config.toml file removed since it generated conflicts with rust base and the tests did not compile

* refactor: change in the use of events, since due to the sdk update they are now used with the contractevent and topic macro

* refactor: structure change in the use of events of the form .publish(e) for the different files that propagate the events

* doc: detailed documentation about the nft-kindfi contract

* chore: add admin.require_auth() add admin.require_auth() for validation and security of contract initialization

* fix: validation was added for the metadata and the event was created to send this

* feat: add root cargo manifest for contracts workspace

* feat(reputation): add cargo manifest for reputation contract

* feat(reputation): add reputation contract main library

* feat(reputation): add reputation contract types and data structures

* feat(reputation): add reputation contract storage layer

* feat(reputation): add reputation contract error types

* feat(reputation): add reputation contract events

* feat(reputation): add NFT client integration for reputation contract

* docs(reputation): add reputation contract documentation

* test(reputation): add reputation contract tests

* test(nft): add NFT contract tests

* chore: update cargo lock file

* docs: update contracts README

* script: add NFT contract deployment script

* script: add reputation contract deployment script

* chore: add environment example file

---------

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* feat: refactor nft-kindfi with SEP-0050 compatibility (#778)

* feat: add SEP-0050 compliant NFTAttribute struct to nft-kindfi types

Replace Vec<String> attributes with Vec<NFTAttribute> using structured
fields (trait_type, value, display_type, max_value) to comply with the
SEP-0050 Non-Fungible Metadata JSON Schema.

* feat: update nft-kindfi tests to use NFTAttribute struct

Adapt all test helpers and test cases to use the new SEP-0050 compliant
NFTAttribute struct instead of plain strings for metadata attributes.

* feat: update reputation nft_client to SEP-0050 attribute format

Refactor NFTMetadata mirror and level attribute helpers to use the new
NFTAttribute struct. Update cross-contract call types and all related
tests for SEP-0050 compliance.

* fix(kyc): prevent URL params cleanup on failure and add error toasts (#777)

* fix(kyc): prevent URL params cleanup on failure and add error toasts

* refactor(kyc): deduplicate error message string per code review

* fix(kyc): sync with develop and add error logging per code review

* refactor: centralize didit kyc status mapping logic (#779)

* refactor: centralize didit kyc status mapping logic

* refactor: apply code review feedback (arrow functions, type-only imports, and alias paths)

* style(ui): use bg-primary token instead of hex code in progress bar (#780)

Co-authored-by: Brandon Fernández <31634868+Bran18@users.noreply.github.com>

* chore: add vercel skills set for OSS

* fix: add new migration strategy

* feat: add fundation support

* chore: generate Supabase database types using MCP tool

- Generated complete TypeScript types from Supabase database
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add complete Supabase database types

- Generated TypeScript types from Supabase database using MCP tool
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: add complete Supabase database types

- Generated TypeScript types from Supabase database using MCP tool
- Includes all tables, enums, functions, and relationships
- Fixes Vercel build error: Module '@services/supabase' has no exported member 'Database'

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix: WebAuthn cross environments

* Fix: WebAuthn non dynamic

* Fix: add path alias

---------

Co-authored-by: Matias Aguilar <aaguilar1x@gmail.com>
Co-authored-by: Karen Giannetto <karengiannetto99@gmail.com>
Co-authored-by: Delfina luna Corradini <105253541+delfinacorr@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@coderabbitai coderabbitai bot mentioned this pull request Feb 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contract smart contract app related enhancement New feature improvement or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve NFT Contract Operability with SEP-0050 Standard

2 participants