Live on Ethereum Sepolia

Verifiable OJT records,
cryptographically
anchored to Ethereum.

InternProof replaces paper OJT logbooks with smart-contract-enforced records. Every clock-in, task description, and supervisor signature is permanently on-chain — independently verifiable by anyone, falsifiable by no one.

Requires MetaMask · Sepolia testnet · No real ETH required

Contract Specifications

Network

Sepolia

Chain ID 11155111

Pattern

UUPS

EIP-1822 proxy

Bytecode

23,531

of 24,576 limit

Functions

46

public ABI methods

100%

Tamper-proof

0

Trust needed

Audit window

The Problem

Paper logbooks are easily falsified.

Traditional OJT documentation depends on physical logbooks signed manually by supervisors. These are vulnerable to forgery, can be backdated, lost, or altered — with no cryptographic guarantee of authenticity.

For Philippine HEIs alone, hundreds of thousands of OJT logbooks are processed every academic year with zero verifiability for future employers.

The Solution

Cryptographic proof, not paper trust.

Every action — clock-in, clock-out, supervisor verification, coordinator confirmation — is a transaction signed by the actor's private key and recorded immutably on Ethereum.

Verification becomes a public read: anyone can confirm a graduate's OJT history in seconds, with no human gatekeeper.

100%

Tamper-resistant

Records cannot be altered post-submission

0

Trust required

Verification needs no central authority

Audit window

Records persist for the lifetime of the chain

<$1

Per record

Sepolia gas cost per log entry

System Architecture

Four roles, enforced on-chain

Role-based access control at the smart contract level using custom modifiers. No role can act outside its permissions.

Admin

System operator. Registers schools, courses, companies, and approves supervisors. One admin per deployment.

Supervisor

Company representative. Gets a unique SUP- code, verifies daily entries, and issues final sign-off when hours are complete.

Student

Intern. Clocks in/out daily on-chain with task descriptions and proof images uploaded to IPFS.

Coordinator

School representative. Final authority that confirms OJT completion after supervisor sign-off.

Verification Flow

From registration to certified completion

01

Student registers on-chain

Student connects MetaMask, enters their supervisor code, and calls registerStudent(). Their wallet is permanently linked to a school, course, and supervisor.

02

Daily clock-in records the timestamp

On arrival, the student calls clockIn(). The block timestamp is captured as time-in. The contract enforces one active session per student at a time.

03

Clock-out with task description and proof

On clockOut(), the contract calculates hours (enforces 4h minimum), stores the task description, and the IPFS CID of the proof image permanently on-chain.

04

Supervisor verifies on-chain

The supervisor calls verifyLogEntry(entryId). The contract verifies wallet authorization, then atomically updates the student's totalVerifiedHours.

05

Sign-off and coordinator confirmation

The supervisor calls issueFinalSignOff(), then the coordinator calls coordinatorConfirm(). Status advances to OJT Complete — the student can download their certificate.

Technical Stack

Production-grade architecture

Smart Contract Layer

LanguageSolidity 0.8.24
Upgrade patternUUPS · EIP-1822 · OpenZeppelin
Access controlOwnableUpgradeable + role modifiers
StorageUTC timestamps · uint256 entry IDs
DeploymentHardhat + hardhat-upgrades
IPFS storagePinata · CID stored on-chain

Application Layer

FrameworkNext.js 14 · App Router
LanguageTypeScript · strict mode
Web3 clientethers.js v6
WalletMetaMask · EIP-1193 provider
FontsSyne + IBM Plex Mono
CertificatejsPDF · landscape · client-side

Ready to begin?

Connect your MetaMask wallet to register, or verify a graduate's record without an account.