Welcome to your first LearnCard integration! In just a few lines of code, you'll create a verifiable, claimable digital badge—what we call a Boost.
This quickstart helps you:
Install LearnCard tools
Create a demo issuer profile
Generate a verifiable Boost (credential)
Output a link that anyone can claim
No experience required. Just code, coffee, and a terminal.
⭐️ What You'll Be Making
🧰 Installation
Choose your preferred package manager:
# Using npm
npm install @learncard/init @learncard/claimable-boosts-plugin @learncard/simple-signing-plugin dotenv
# Using yarn
yarn add @learncard/init @learncard/claimable-boosts-plugin @learncard/simple-signing-plugin dotenv
# Using pnpm
pnpm add @learncard/init @learncard/claimable-boosts-plugin @learncard/simple-signing-plugin dotenv
🚀 Quickstart Script
This script:
Initializes a LearnCard wallet
Creates an issuer profile
Defines a Boost template
Issues the Boost to the network
Generates a claim link for anyone to redeem
✅ Prerequisites
Node.js (v14+)
A secure seed phrase (stored in SECURE_SEED)
A unique ID for your issuer (e.g. my-awesome-org-profile)
📁 Create createBoost.js:
import 'dotenv/config';
import { initLearnCard } from '@learncard/init';
import { getClaimableBoostsPlugin } from '@learncard/claimable-boosts-plugin';
import { getSimpleSigningPlugin } from '@learncard/simple-signing-plugin';
const DEMO_SEED = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdee'
const secure_seed = process.env.SECURE_SEED;
const profileId = process.env.PROFILE_ID || 'my-awesome-org-profile';
const profileName = process.env.PROFILE_NAME || 'My Awesome Org';
// Use user provided seed, or use backup DEMO seed
const seed = secure_seed || DEMO_SEED;
if (!secure_seed) {
console.warn('Warning: SECURE_SEED environment variable is not set, using DEMO_SEED.');
}
async function quickstartBoost() {
try {
console.log('Initializing LearnCard...');
const learnCard = await initLearnCard({
seed: seed,
network: true,
allowRemoteContexts: true
});
const signingLearnCard = await learnCard.addPlugin(
await getSimpleSigningPlugin(learnCard, 'https://api.learncard.app/trpc')
);
const claimableLearnCard = await signingLearnCard.addPlugin(
await getClaimableBoostsPlugin(signingLearnCard)
);
console.log('LearnCard initialized with plugins.');
try {
console.log(`Creating profile "${profileId}"...`);
await claimableLearnCard.invoke.createProfile({
profileId: profileId,
displayName: profileName,
description: 'Issuing awesome credentials.',
});
console.log(`Profile "${profileId}" created successfully.`);
} catch (error) {
if (error.message?.includes('Profile already exists')) {
console.log(`Profile "${profileId}" already exists, continuing.`);
} else {
throw new Error(`Failed to create profile: ${error.message}`);
}
}
console.log('Creating boost template...');
const boostTemplate = await claimableLearnCard.invoke.newCredential({
type: 'boost',
boostName: 'Quickstart Achievement',
boostImage: 'https://placehold.co/400x400?text=Quickstart',
achievementType: 'Influencer',
achievementName:'Quickstart Achievement',
achievementDescription: 'Completed the quickstart guide!',
achievementNarrative: 'User successfully ran the quickstart script.',
achievementImage: 'https://placehold.co/400x400?text=Quickstart'
});
console.log('Boost template created.');
console.log('Creating boost on the network...');
const boostUri = await claimableLearnCard.invoke.createBoost(
boostTemplate,
{
name: boostTemplate.name,
description: boostTemplate.achievementDescription,
}
);
console.log(`Boost created with URI: ${boostUri}`);
console.log('Generating claim link...');
const claimLink = await claimableLearnCard.invoke.generateBoostClaimLink(boostUri);
console.log('\n✅ Success! Your Claimable Boost link is ready:');
console.log(claimLink);
return claimLink;
} catch (error) {
console.error('\n❌ Error during quickstart process:', error);
process.exit(1);
}
}
quickstartBoost();
🔩 Setup Organization Config (optional)
This step sets up your secret seed phrase for controlling your Organization's profile. However, for demonstration, you may safely skip this step to use the provided DEMO_SEED. Never hardcode a seed in production. Learn more about seeds.
You must create a unique profile ID for your organization. It must be 3-40 characters, lowercase, no spaces or special characters. E.g.: my-organization, acme, taffy-co-organization , etc.
.env
SECURE_SEED="..." # Created from command in prior step.
PROFILE_ID="<unique-profile-id>" # Unique profile ID.
PROFILE_NAME="<Display Name>" # Human Readable Display Name
🏃♂️ Run the Script
node createBoost.js
🎉 What You'll See
The console will print a claimable URL like:
✅ Success! Your Claimable Boost link is ready:
https://claim.learncard.app/boost/abc123...
Anyone with that link can scan or click to claim their badge. It’s a live verifiable credential issued by your script.
Want to customize your claimable boost even more? Check out our Core Concepts guide on "Getting Started with Boosts."
You just built your first digital credential.
You’ve touched real-world decentralized identity and verifiable credentials—with just a few lines of code.
We’re glad you’re here. Ready to build something great?