Your First Integration
Claim Your First Digital Badge in 5 Minutes!
Last updated
Was this helpful?
Was this helpful?
# 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 Bun
bun add @learncard/init @learncard/claimable-boosts-plugin @learncard/simple-signing-plugin dotenv
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 = 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();
echo "SECURE_SEED=\"$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")\"" > .envecho "SECURE_SEED=\"$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")\"" > .env"SECURE_SEED=\"$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")\"" | Out-File -Encoding utf8 .envSECURE_SEED="..." # Created from command in prior step.
PROFILE_ID="<unique-profile-id>" # Unique profile ID.
PROFILE_NAME="<Display Name>" # Human Readable Display Namenode createBoost.jsβ
Success! Your Claimable Boost link is ready:
https://claim.learncard.app/boost/abc123...