- Node.js 20+ and npm
- Anthropic API key (Get one here)
- Visit console.anthropic.com
- Sign up or log in
- Navigate to API Keys
- Click Create Key and copy your key
Cost Information:
- Pay-as-you-go pricing
- Claude Sonnet 4.5: ~£2.20 per million input tokens, ~£11 per million output tokens
- Typical module generation: £0.15-£0.30 (with research enabled)
- New accounts often include free credits
See Anthropic's pricing for current rates.
git clone https://github.com/foundersandcoders/rhea.git
cd rhea
npm installcp .env.example .envEdit .env and add your API key:
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxSecurity:
- Never commit
.env(already in.gitignore) - Keep your API key secure
- Don't share in screenshots or public forums
npm run devOpen http://localhost:5173 in your browser.
- Open http://localhost:5173
- Click either "Start Module Generator" or "Start Course Builder"
- Follow the workflow steps
- You should see successful generation
Troubleshooting: If you see "ANTHROPIC_API_KEY not configured":
- Check
.envfile exists in project root - Verify API key is correctly set
- Restart dev server after adding key
You need three XML files:
projects.xml - Project briefs
<Projects>
<ProjectBriefs>
<ProjectBrief>
<Overview>
<Name>Example Project</Name>
<Task>What learners will build</Task>
<Focus>Key technologies</Focus>
</Overview>
<Criteria>Success criteria as bullet points</Criteria>
<Skills>
<Skill>
<Name>Skill Name</Name>
<Details>What learners will learn</Details>
</Skill>
</Skills>
<Examples>
<Example>
<Name>Example Name</Name>
<Description>Brief description</Description>
</Example>
</Examples>
</ProjectBrief>
</ProjectBriefs>
</Projects>skills.xml - Additional skills
<AdditionalSkills>
<SkillsCategory>
<Name>Category Name</Name>
<Skill>
<SkillName>Specific Skill</SkillName>
<Importance>Recommended</Importance>
<SkillDescription>Brief description</SkillDescription>
</Skill>
</SkillsCategory>
</AdditionalSkills>research.xml - Research topics
<ResearchTopics>
<PrimaryTopics>
<PrimaryTopic>
<TopicName>Topic Name</TopicName>
<TopicDescription>What to research</TopicDescription>
</PrimaryTopic>
</PrimaryTopics>
</ResearchTopics>Minimal valid files:
<Projects></Projects><Skills></Skills>or<AdditionalSkills></AdditionalSkills><Research></Research>or<ResearchTopics></ResearchTopics>
Special characters must be escaped:
<!-- WRONG -->
<Task>Compare with < and > operators</Task>
<!-- CORRECT -->
<Task>Compare with < and > operators</Task>Escape these characters:
&→&<→<>→>"→"(in attributes)'→'(in attributes)
Tags are case-sensitive:
<!-- WRONG -->
<Name>Project</name>
<!-- CORRECT -->
<Name>Project</Name>XML declaration (optional) must be first line:
<!-- CORRECT -->
<?xml version="1.0" encoding="UTF-8"?>
<Projects>- Upload Files - Drag & drop your three XML files
- Provide Context - Fill in the structured form:
- Module duration (weeks)
- Expected cohort size
- Learners' experience levels
- Required technologies
- Optional: Expected delivery date, additional info
- Enable Research (Recommended) - Allows web search for current best practices
- Generate - Takes 2-4 minutes with research, 30-60 seconds without
- Download - Get your module specification as XML
Generated modules include:
- Module Overview - Description and learning objectives (minimum 3)
- Research Topics - Primary topics (minimum 5) and optional stretch topics
- Project Briefs - Detailed project specifications (minimum 2)
- Overview, criteria, skills (minimum 3), examples (minimum 3)
- Project Twists - Interesting variations (minimum 2)
- Additional Skills - Supplementary skills by category
- Metadata - Generation info, changelog, provenance tracking
More detail = better output:
- ✅ Multiple project briefs with detailed criteria
- ✅ 3-5 skills per project with explanations
- ✅ 3-4 examples per project
- ❌ Empty or minimal files
- ✅ "React with TypeScript", "FastAPI", "PostgreSQL"
- ❌ "Frontend framework", "Backend", "Database"
Good:
- "Learners must deploy to cloud platforms"
- "No paid services - free tiers only"
- "Emphasize testing and CI/CD"
Not helpful:
- Repeating structured fields
- Vague requests like "make it good"
Essential for:
- ✅ Fast-moving fields (AI/ML, web frameworks)
- ✅ Modules delivered 3+ months away
- ✅ Emerging technologies
Less important for:
- Stable foundational topics (SQL basics, algorithms)
- Historical or theoretical content
- Generate baseline module
- Review output
- Adjust inputs based on what you learned
- Regenerate
Solutions:
- Check
.envexists in project root - Verify format:
ANTHROPIC_API_KEY=sk-ant-api03-xxxxx - Restart dev server
- No spaces around
=sign - For production: set in hosting platform's env vars
Solutions:
- Check for unescaped special characters (
&,<,>) - Verify all tags properly closed and case-matched
- Ensure correct root element (
<Projects>,<Skills>,<Research>) - Use XML validator
Solutions:
- Add more detail to input files
- Check "Additional Information" for contradictory requirements
- Try disabling "Extended Thinking"
- Review validation errors shown
Solutions:
- Try again (web searches can be slow)
- Simplify inputs (fewer technologies, shorter additional info)
- Disable research temporarily
Symptoms:
- 429 errors ("rate limit exceeded")
- 402 errors ("insufficient credits")
Solutions:
- Wait a minute and retry (per-minute limits)
- Check Anthropic console billing
- Disable research for testing to reduce costs
- Generate a course: Try the Course Builder for multi-module courses
- Explore the codebase: See
/docs/technical-overview.md - Read about the project: See
/docs/About-Rhea.md - Report issues: GitHub Issues
# Build
npm run build
# Preview
npm run previewDeploy to:
- Vercel
- Netlify
- Node.js servers
- Other platforms (see SvelteKit adapters)
Important: Set ANTHROPIC_API_KEY in your hosting platform's environment variables.