Building the foundational trust layer for the new creative economy. As generative AI blurs the line between human and machine, OriginStamp provides a "Proof-of-Process" protocol, allowing creators to generate unforgeable on-chain histories for their work.
OriginStamp is a revolutionary decentralized protocol that addresses the fundamental crisis of trust in the digital creative economy. In an age where AI-generated content blurs the line between human and machine creation, OriginStamp provides a "Proof-of-Process" protocol that allows creators to generate unforgeable, on-chain histories for their work.
In the age of advanced generative AI, the digital world faces a fundamental crisis of trust:
- Indistinguishable Content: It's becoming increasingly difficult to distinguish authentic, human-created work from AI-generated content
- Devalued Human Creativity: The flood of AI content devalues the skill, time, and creativity of human artists, writers, and developers
- Provenance Issues: Significant challenges for copyright, digital commerce, and intellectual property protection
- Lack of Standards: No reliable standard for verifying the true origin and effort behind digital assets
OriginStamp is not an AI detection tool. Instead, we offer a more fundamental and proactive solution: a decentralized protocol for Proof of Human Process.
We provide creators with tools to generate an unforgeable, on-chain certificate of origin for any digital or physical work. This certificate doesn't just point to the final file; it contains the entire, immutable history of its creation process.
A creator begins by authenticating using Internet Identity, linking their secure, hardware-based identity to a new project. They initiate a "Creation Session" within the OriginStamp dApp, which creates a dedicated, secure on-chain log for their work.
Through a simple plugin in their native creative software (e.g., Photoshop, VS Code, Ableton), key creative actions are automatically and periodically recorded to the project's on-chain log. These records can include metadata like "New layer created," "Brush tool used," periodic file hashes, or code commit hashes, each with an immutable timestamp.
Upon completion, the creator finalizes the session. This action mints a final Certificate NFT. This NFT is a container holding the final asset's hash and, most importantly, a cryptographic link to the entire, unchangeable on-chain log of its creation process.
Anyone can verify an OriginStamp asset. By scanning a QR code or visiting a public verification page, a user is presented with a clear, interactive dashboard. This dashboard displays the full creation timeline, allowing a potential buyer or collector to see the entire history and compare the on-chain process data with the final work, providing unparalleled confidence in its authenticity.
This project is uniquely suited for the Internet Computer ecosystem for several critical reasons:
- Reverse Gas Model: This is essential. It allows the platform to cover the small, frequent transaction costs of logging, providing a frictionless experience for creators. They can focus on creating, not on paying for every recorded action.
- On-Chain Data Storage: ICP's architecture allows for the efficient and affordable storage of the extensive log data directly on-chain, ensuring the provenance record is truly permanent and decentralized.
- Internet Identity: Provides a built-in, secure, and user-friendly authentication system without the need for traditional seed phrases, which is crucial for linking a work to a real identity.
- Performance: ICP's speed and fast finality are necessary to handle the real-time logging of creative actions without interrupting the creator's flow.
Our goal for the WCHL 2025 hackathon is to build a functional Minimum Viable Product that includes:
- The core canisters for project initiation and immutable logging.
- A proof-of-concept plugin for a web-based text editor.
- The public-facing verification dashboard to display the on-chain process history.
This project is built with:
- π¦ Rust-based Canister backend
- βοΈ React + TypeScript frontend with modular architecture
- π¨ Neumorphic Design System for modern UI/UX
- π Internet Identity authentication
- π§ͺ Full Test Suite: Vitest + PocketIC for backend and frontend
- π CI/CD with GitHub Actions for automated tests and code quality
- π Comprehensive Documentation for all components
graph TB
subgraph "Frontend Layer"
UI[React + TypeScript UI]
Auth[Authentication Components]
Dashboard[Dashboard Components]
Marketplace[Marketplace Components]
Plugin[Creative Software Plugin]
end
subgraph "Backend Layer (Internet Computer)"
subgraph "Core Canisters"
Users[Users Module]
Sessions[Physical Art Sessions]
Certificates[Certificates Module]
NFT[NFT Module]
S3[S3 Integration]
end
subgraph "Storage Layer"
OnChain[On-Chain Storage]
S3Storage[S3 Storage]
end
end
subgraph "External Services"
II[Internet Identity]
S3[S3 Compatible Storage]
ICP[Internet Computer Protocol]
end
subgraph "Creative Software"
PS[Photoshop]
VS[VS Code]
AB[Ableton]
Other[Other Creative Tools]
end
%% Frontend connections
UI --> Auth
UI --> Dashboard
UI --> Marketplace
Plugin --> UI
%% Backend connections
Auth --> Users
Dashboard --> Sessions
Dashboard --> Certificates
Marketplace --> NFT
Sessions --> S3
%% External connections
Auth --> II
S3 --> S3Storage
Users --> OnChain
Sessions --> OnChain
Certificates --> OnChain
NFT --> OnChain
%% Creative software connections
PS --> Plugin
VS --> Plugin
AB --> Plugin
Other --> Plugin
%% ICP connections
Users --> ICP
Sessions --> ICP
Certificates --> ICP
NFT --> ICP
graph LR
subgraph "Backend Canister (Rust)"
subgraph "Core Modules"
Users[Users Module<br/>- User Management<br/>- Authentication<br/>- Profile Data]
Sessions[Physical Art Sessions<br/>- Session Creation<br/>- Process Logging<br/>- Real-time Updates]
Certificates[Certificates Module<br/>- Certificate Generation<br/>- Verification<br/>- Metadata Storage]
NFT[NFT Module<br/>- ICRC-7 Implementation<br/>- Token Minting<br/>- Collection Management]
S3[S3 Integration<br/>- File Upload/Download<br/>- Storage Management<br/>- URL Generation]
end
subgraph "Supporting Layer"
Types[Type Definitions<br/>- Data Structures<br/>- Candid Interfaces]
Utils[Utility Functions<br/>- Helper Methods<br/>- Common Operations]
end
end
subgraph "External Dependencies"
ICP[Internet Computer Protocol]
II[Internet Identity]
S3Service[S3 Storage Service]
end
%% Module connections
Users --> Types
Sessions --> Types
Certificates --> Types
NFT --> Types
S3 --> Types
Users --> Utils
Sessions --> Utils
Certificates --> Utils
NFT --> Utils
S3 --> Utils
%% External connections
Users --> II
Sessions --> ICP
Certificates --> ICP
NFT --> ICP
S3 --> S3Service
graph TB
subgraph "Frontend Application (React + TypeScript)"
subgraph "Page Layer"
Landing[Landing Page]
Auth[Authentication Pages]
Dashboard[Dashboard Pages]
Marketplace[Marketplace Pages]
Settings[Settings Page]
end
subgraph "Component Layer"
Common[Common Components<br/>- Button, Card, Modal<br/>- Form Elements, Toast]
Layout[Layout Components<br/>- Header, Sidebar<br/>- Navigation, Footer]
Feature[Feature Components<br/>- Session Management<br/>- Certificate Display<br/>- NFT Gallery]
end
subgraph "Service Layer"
AuthService[Authentication Service]
SessionService[Session Service]
CertificateService[Certificate Service]
NFTService[NFT Service]
S3Service[S3 Service]
end
subgraph "State Management"
AuthContext[Auth Context]
ToastContext[Toast Context]
ThemeContext[Theme Context]
end
subgraph "Utilities"
Hooks[Custom Hooks]
Utils[Utility Functions]
Types[TypeScript Types]
end
end
subgraph "External Integrations"
Backend[Backend Canister]
II[Internet Identity]
S3[S3 Storage]
end
%% Page connections
Landing --> Common
Auth --> Common
Dashboard --> Common
Marketplace --> Common
Settings --> Common
%% Component connections
Common --> Layout
Feature --> Common
%% Service connections
Auth --> AuthService
Dashboard --> SessionService
Dashboard --> CertificateService
Marketplace --> NFTService
Settings --> S3Service
%% Context connections
AuthService --> AuthContext
SessionService --> ToastContext
CertificateService --> ToastContext
NFTService --> ToastContext
%% Utility connections
AuthService --> Hooks
SessionService --> Hooks
CertificateService --> Hooks
NFTService --> Hooks
%% External connections
AuthService --> II
SessionService --> Backend
CertificateService --> Backend
NFTService --> Backend
S3Service --> S3
flowchart TD
Start([User visits OriginStamp]) --> Landing{Landing Page}
Landing --> |Learn More| HowItWorks[How It Works Page]
Landing --> |Get Started| Login[Login Page]
HowItWorks --> Login
Login --> |Internet Identity| IIAuth[Internet Identity Auth]
Login --> |Google OAuth| GoogleAuth[Google OAuth]
IIAuth --> |Success| Dashboard[Dashboard]
GoogleAuth --> |Success| Dashboard
IIAuth --> |Failed| LoginError[Authentication Error]
GoogleAuth --> |Failed| LoginError
LoginError --> Login
Dashboard --> |Logout| Login
flowchart TD
Start([User starts creation]) --> CreateSession[Create New Session]
CreateSession --> |Fill Form| SessionForm[Session Details Form]
SessionForm --> |Project Name| ProjectName[Enter Project Name]
SessionForm --> |Description| Description[Add Description]
SessionForm --> |Category| Category[Select Category]
ProjectName --> ValidateForm{Validate Form}
Description --> ValidateForm
Category --> ValidateForm
ValidateForm --> |Valid| InitSession[Initialize Session]
ValidateForm --> |Invalid| SessionForm
InitSession --> |Success| ActiveSession[Active Session Dashboard]
InitSession --> |Failed| SessionError[Session Error]
SessionError --> CreateSession
ActiveSession --> |Start Recording| Recording[Process Recording Active]
ActiveSession --> |Pause| Paused[Session Paused]
ActiveSession --> |Stop| Finalize[Finalize Session]
Recording --> |Auto-save| AutoSave[Auto-save Process Data]
Recording --> |Manual Save| ManualSave[Manual Save]
AutoSave --> Recording
ManualSave --> Recording
Paused --> |Resume| Recording
Paused --> |Stop| Finalize
Finalize --> |Generate Certificate| Certificate[Certificate NFT]
Finalize --> |Save Draft| Draft[Save as Draft]
Certificate --> |Success| CertificateView[View Certificate]
Certificate --> |Failed| CertError[Certificate Error]
CertError --> Finalize
Draft --> ActiveSession
flowchart TD
Start([Creative Process Begins]) --> Plugin[Creative Software Plugin]
Plugin --> |Detect Actions| ActionDetection[Action Detection]
ActionDetection --> |Tool Usage| ToolUsage[Tool Usage Log]
ActionDetection --> |File Changes| FileChanges[File Change Log]
ActionDetection --> |Time Tracking| TimeTracking[Time Tracking]
ToolUsage --> |Periodic Upload| UploadToChain[Upload to Blockchain]
FileChanges --> |Hash Generation| FileHash[File Hash Generation]
TimeTracking --> |Session Duration| Duration[Session Duration]
FileHash --> UploadToChain
Duration --> UploadToChain
UploadToChain --> |Success| ChainStorage[On-Chain Storage]
UploadToChain --> |Failed| RetryUpload[Retry Upload]
RetryUpload --> UploadToChain
ChainStorage --> |Session Complete| Finalize[Finalize Session]
Finalize --> |Generate NFT| NFTCreation[NFT Certificate Creation]
NFTCreation --> |Success| NFTCertificate[NFT Certificate]
NFTCreation --> |Failed| NFTRetry[NFT Creation Retry]
NFTRetry --> NFTCreation
NFTCertificate --> |Public Verification| Verification[Public Verification Page]
Verification --> |QR Code Scan| QRScan[QR Code Scanner]
Verification --> |Direct URL| DirectURL[Direct URL Access]
QRScan --> VerificationResult[Verification Result]
DirectURL --> VerificationResult
VerificationResult --> |Valid| ValidCertificate[Valid Certificate Display]
VerificationResult --> |Invalid| InvalidCertificate[Invalid Certificate Alert]
ValidCertificate --> |View Timeline| Timeline[Creation Timeline]
ValidCertificate --> |View Metadata| Metadata[Certificate Metadata]
Timeline --> |Interactive Display| InteractiveTimeline[Interactive Timeline]
Metadata --> |Certificate Info| CertificateInfo[Certificate Information]
flowchart TD
Start([User visits Marketplace]) --> Marketplace[Marketplace Home]
Marketplace --> |Browse Collections| Collections[Collections Page]
Marketplace --> |View Activity| Activity[Activity Feed]
Marketplace --> |Check Rankings| Rankings[Rankings Page]
Marketplace --> |View Stats| Stats[Statistics Page]
Collections --> |Select Collection| CollectionDetail[Collection Detail]
CollectionDetail --> |View Certificate| CertificateDetail[Certificate Detail]
Activity --> |View Recent| RecentActivity[Recent Activity]
Rankings --> |Top Creators| TopCreators[Top Creators]
Stats --> |Platform Stats| PlatformStats[Platform Statistics]
CertificateDetail --> |Verify Certificate| Verification[Certificate Verification]
CertificateDetail --> |View Creator| CreatorProfile[Creator Profile]
CertificateDetail --> |Share| ShareCertificate[Share Certificate]
Verification --> |Valid| ValidCert[Valid Certificate]
Verification --> |Invalid| InvalidCert[Invalid Certificate]
ValidCert --> |View Process| ProcessHistory[Process History]
ValidCert --> |Download| DownloadAsset[Download Asset]
CreatorProfile --> |View Portfolio| Portfolio[Creator Portfolio]
CreatorProfile --> |Follow| FollowCreator[Follow Creator]
ShareCertificate --> |Social Media| SocialShare[Social Media Share]
ShareCertificate --> |Direct Link| DirectShare[Direct Link Share]
ProcessHistory --> |Timeline View| TimelineView[Timeline View]
ProcessHistory --> |Metadata View| MetadataView[Metadata View]
- π― Project Overview
- π¨ The Problem
- π‘ Our Solution
- π§ How It Works
- π The Verification Experience
- π Why Internet Computer
- π― Hackathon Goal
- π Technology Stack
- ποΈ System Architecture
- π User Flow Diagrams
- π Getting Started
- π Project Structure
- β Testing Patterns
- π CI/CD Workflow
- π Resources & Documentation
A devcontainer is preconfigured for you to start coding instantly!
- Click on "Use this Template" β "Create a new repository".
- Click "Code β Open with Codespaces"
- Change machine type to 4-core 16GB RAM β’ 32GB
- Once the codespace is created, you can open it in VS Code Local
- Everything is pre-installed and ready for you to run the following commands
npm installOriginStamp requires S3 storage for handling file uploads and storage. Follow these steps to configure S3:
Copy the example environment file and configure your S3 credentials:
cp .env.example .envEdit the .env file and replace the placeholder values with your actual S3 credentials:
# S3 Configuration for Development
# Replace with your actual S3/AWS credentials
S3_ACCESS_KEY=your_actual_access_key
S3_SECRET_KEY=your_actual_secret_key
S3_REGION=ap-southeast-1
S3_ENDPOINT=https://your-s3-endpoint.com/ # Optional: for S3-compatible services
S3_BUCKET_NAME=your_bucket_nameS3_ACCESS_KEY: Your AWS/S3 access keyS3_SECRET_KEY: Your AWS/S3 secret keyS3_REGION: AWS/S3 region (e.g.,ap-southeast-1,us-west-2)S3_BUCKET_NAME: Your S3 bucket name
S3_ENDPOINT: Custom S3 endpoint for S3-compatible services (leave empty for AWS S3)
After deploying the backend canister, run the S3 setup script to configure the canister:
# For local development
./scripts/setup-s3.sh local
# For IC mainnet deployment
./scripts/setup-s3.sh icThe script will:
- β
Validate your S3 credentials in the
.envfile - β Configure the backend canister with S3 settings
- β Test the S3 configuration by generating an upload URL
- β Verify that the configuration is working properly
# Start everything for development (DFX + Backend + Frontend)
npm run dev# Deploy everything (backend + frontend)
npm run deploy# Start DFX local network
dfx start --clean
# In another terminal, deploy backend canisters
npm run deploy:backend
# Deploy frontend
npm run deploy:frontend# For daily development (starts DFX, deploys backend, starts frontend)
npm run dev
# After backend deployment, configure S3 (one-time setup)
./scripts/setup-s3.sh local
# For frontend development only (if backend is already running)
npm startNote: The S3 configuration script (./scripts/setup-s3.sh) should be run after the backend canister is deployed. It's a one-time setup unless you change your S3 credentials or redeploy the backend canister.
# Run all tests
npm test
# Run specific test suites
npm run test:frontend # Frontend tests only
npm run test:backend # Backend tests onlyComprehensive documentation is available in the docs/ folder:
- π Project Overview - High-level project description
- π¨ UI Components - Design system and components
- π οΈ Development Setup - Development environment guide
OriginStamp/
βββ .devcontainer/devcontainer.json # Container config for development
βββ .github/workflows/ # GitHub CI/CD pipelines
βββ docs/ # π Comprehensive documentation
β βββ project-overview.md # Project description and goals
β βββ frontend/ # Frontend component documentation
β βββ backend/ # Backend architecture docs
β βββ testing/ # Testing strategies and guides
β βββ development/ # Development setup and processes
β βββ api/ # API documentation
βββ src/
β βββ backend/ # π¦ Rust backend canister
β β βββ src/
β β β βββ lib.rs # Main Rust file
β β βββ Cargo.toml # Rust dependencies
β βββ frontend/ # βοΈ React + TypeScript frontend
β β βββ src/
β β β βββ App.tsx # Main App component
β β β βββ pages/ # π Page components (modular)
β β β β βββ landing/ # Landing page
β β β β βββ auth/ # Authentication pages
β β β β βββ dashboard/ # Dashboard pages
β β β βββ components/ # π§© Reusable UI components
β β β β βββ login/ # Authentication components
β β β β βββ profile/ # User profile components
β β β β βββ common/ # Common UI elements
β β β β βββ ui/ # UI components
β β β βββ contexts/ # React contexts
β β β βββ hooks/ # Custom React hooks
β β β βββ services/ # API service layers
β β β βββ types/ # TypeScript type definitions
β β β βββ utils/ # Utility functions
β β β βββ css/ # π¨ ITCSS styling architecture
β β βββ assets/ # Static assets (images, icons)
β β βββ tests/ # Frontend unit tests
β β βββ index.html # Frontend entry point
β β βββ main.tsx # React main file
β β βββ package.json # Frontend dependencies
β β βββ tsconfig.json # TypeScript configuration
β β βββ vite.config.ts # Vite build configuration
β β βββ vite-env.d.ts # Vite type definitions
β βββ declarations/ # Auto-generated canister interfaces
βββ tests/
β βββ src/ # Backend test files
β βββ backend-test-setup.ts # PocketIC instance
β βββ vitest.config.ts # Vitest configuration
βββ scripts/
β βββ start.sh # π Full deployment script
β βββ dev-container-setup.sh # Development environment setup
β βββ generate-candid.sh # Candid generation script
βββ dfx.json # ICP configuration
βββ Cargo.toml # Root Rust workspace config
βββ package.json # Project dependencies and scripts
βββ CHANGELOG.md # Project changelog
Located under .github/workflows/, this includes:
- π§ͺ Automated end-2-end test runs
- π Code quality checks
- π Automated deployment
- Component Testing: Individual component tests with React Testing Library
- Integration Testing: User flow and interaction tests
- E2E Testing: Complete user journey testing
- Unit Testing: Individual function and method tests
- Integration Testing: Canister interaction tests
- PocketIC Testing: Local blockchain simulation
- Soft UI: Subtle shadows and highlights
- Consistent Spacing: 8px grid system
- Color Palette: Light/dark theme support
- Typography: Clear hierarchy and readability
- Reusable Components: Button, Card, Modal, Toast
- Form Elements: Input, Select, Checkbox
- Navigation: Header, Sidebar, Breadcrumbs
- Feedback: Loading, Error, Success states
# Full deployment
npm run deploy
# Step-by-step
npm run deploy:backend
npm run deploy:frontend- Internet Computer: Mainnet deployment
- Environment Variables: Secure configuration
- Monitoring: Performance and error tracking
- ICP Dev Docs
- Rust CDK
- React Documentation
- TypeScript Handbook
- Vite Build Tool
- Vitest Testing Framework
- Internet Computer Foundation for the amazing blockchain platform
- React Team for the incredible frontend framework
- Rust Community for the robust backend language
- Open Source Contributors who make this possible
Build the future of digital authenticity with OriginStamp! πβ¨