Complete setup guide for running the JEDx & Skills API demo server locally and deploying to Render.com.
- β Demo Server - Node.js/Express implementing both APIs
- β Sample Data - Real JSON files automatically loaded
- β Postman Collections - Updated to work with demo server
- β Environment Files - Local and production configs
- β Deploy Config - Ready for Render.com
cd server
npm installnpm startYou should see:
βββββββββββββββββββββββββββββββββββββββββββββ
β JEDx & Skills API Demo Server β
β Server running on: http://localhost:3000β
βββββββββββββββββββββββββββββββββββββββββββββ
Open browser to: http://localhost:3000
You should see API info with available endpoints.
- Open Postman
- Click Import
- Import these files:
JEDx_API.postman_collection.jsonSkills_API.postman_collection.jsonPostman_Environment_Local.json
In Postman:
- Click the environment dropdown (top right)
- Select "JEDx & Skills API - Local"
Try these in Postman:
Get API Info:
GET http://localhost:3000/
List All Skills:
GET {{skills_base_url}}/skills
Get Person Skills:
GET {{skills_base_url}}/assertions?personId=employee-45678¤tOnly=true
List Jobs:
GET {{jedx_base_url}}/jobs
Get Job Details:
GET {{jedx_base_url}}/jobs/SWE-001
Get Job Skills:
GET {{jedx_base_url}}/jobs/SWE-001/skills
- GitHub account
- Render.com account (free tier available)
# Initialize git if not already done
git init
git add .
git commit -m "Add JEDx & Skills API demo server"
# Create new repo on GitHub, then:
git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPO.git
git push -u origin main- Go to render.com
- Click New β Web Service
- Connect your GitHub account
- Select your repository
- Render will detect
render.yamlautomatically - Click Deploy Web Service
Or use the Deploy Button:
Add this to your README.md:
[](https://render.com/deploy)Render will:
- Install dependencies (
npm install) - Start server (
npm start) - Assign a URL like:
https://your-app-name.onrender.com
Takes ~2-3 minutes.
Open: https://your-app-name.onrender.com
You should see the API info page.
- Import
Postman_Environment_Production.json - Edit the environment
- Replace
your-app-namewith your actual Render URL:jedx_base_url: https://YOUR-APP.onrender.com/api/v1/jedx skills_base_url: https://YOUR-APP.onrender.com/api/v1/skills - Save
Select the Production environment in Postman and run the same requests!
The server automatically loads from /sample-data/:
- β 1 job (SWE-001 Senior Software Engineer)
- From:
job-skills-architecture.json
- β 15+ unique skills
- From:
person-skills-profile.json,course-skills-assertions.json,open-badge-credential.json
- β 8 skill assertions for employee-45678
- From:
person-skills-profile.json
- β 10 workers from Arkansas state agency
- From:
stateAgencyArkansas_4034/worker*.json
- β 1 organization
- From:
stateAgencyArkansas_4034/organization.json
- β 1 AWS Cloud Architect badge
- From:
open-badge-credential.json
1. GET {{jedx_base_url}}/jobs/SWE-001
β See job details
2. GET {{jedx_base_url}}/jobs/SWE-001/skills
β See required skills (Go, PostgreSQL, AWS)
3. GET {{skills_base_url}}/assertions?personId=employee-45678
β See candidate's skills
4. POST {{skills_base_url}}/jedx/match
Body: {
"candidateId": "employee-45678",
"jobId": "SWE-001"
}
β Get match score and gaps
1. GET {{skills_base_url}}/analytics/skills-inventory?department=Engineering
β See skills distribution
2. POST {{skills_base_url}}/analytics/gap-analysis
Body: {
"targetRole": { "@id": "SWE-001" },
"currentPopulation": { "department": "Engineering" }
}
β Identify gaps
Create a new skill:
POST {{skills_base_url}}/skills
Body: {
"@context": "https://schema.org",
"@type": "Skill",
"name": "Kubernetes",
"codedNotation": "K8S",
"skillCategory": "Technical"
}
Create a new job:
POST {{jedx_base_url}}/jobs
Body: {
"job": {
"organizationId": "TechCorp-2026",
"jobId": "DEVOPS-001",
"title": "DevOps Engineer",
"jobDuties": "Build and maintain CI/CD pipelines",
"department": "Engineering"
}
}
Create skill assertion:
POST {{skills_base_url}}/assertions
Body: {
"@context": [
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
"https://schema.org"
],
"@type": "SkillAssertion",
"skill": { "@id": "https://api.hropen.org/skills/K8S" },
"about": { "@id": "https://organization.example.com/people/employee-45678" },
"proficiencyLevel": {
"@id": "https://organization.example.com/proficiency-scales/4-level/3"
},
"validFrom": "2026-02-03T00:00:00Z",
"validUntil": "2028-02-03T00:00:00Z"
}
Error: "Cannot find module 'express'"
cd server
rm -rf node_modules package-lock.json
npm installError: "Port 3000 already in use"
# Find and kill process using port 3000
lsof -ti:3000 | xargs kill -9
# Or use different port
PORT=3001 npm startError: "Could not get response"
- Check server is running:
http://localhost:3000 - Verify environment is selected (top right in Postman)
- Check
jedx_base_urlandskills_base_urlvariables
Error: "404 Not Found"
- Ensure URL includes
/api/v1/jedxor/api/v1/skills - Example:
http://localhost:3000/api/v1/jedx/jobs(NOT/jobs)
Build Failed
- Check
package.jsonis inserver/directory - Verify Node version in
package.jsonengines - Check Render build logs
503 Service Unavailable
- Wait 2-3 minutes for first deploy
- Check Render logs for errors
- Free tier may take longer to start
Edit server/routes/jedx.js or server/routes/skills.js to:
- Add more endpoints
- Implement real business logic
- Add database persistence
- Enhance matching algorithms
Create JSON files in /sample-data/:
- More jobs
- More workers
- More skills
- More credentials
Server will auto-load on restart.
Replace in-memory storage with PostgreSQL:
- Install
pgpackage - Update routes to query database
- Add connection in
server.js
- Install
jsonwebtoken - Add auth middleware
- Protect endpoints
- Validate tokens
- Server README:
server/README.md - Skills API Guide:
SKILLS_API_GUIDE.md - JEDx Guide:
POSTMAN_GUIDE.md - Examples:
SKILLS_API_EXAMPLES.md
- Auto-reload during development:
npm install -g nodemon && npm run dev - Test with curl:
curl http://localhost:3000/health - View logs: Check terminal where server is running
- Reset data: Restart server (in-memory storage resets)
- Server starts locally without errors
- Can access
http://localhost:3000in browser - Postman collections imported
- Local environment selected in Postman
- Can list skills via Postman
- Can list jobs via Postman
- Can get person skills profile
- (Optional) Deployed to Render.com
- (Optional) Production environment configured
You're all set! π
Start making requests and exploring the demo APIs. The server is production-ready and can be extended with your own logic and data.
Questions? Check the server logs or README files for more details.