Kaernest Character Builder - Vision & Roadmap¶
🎯 End Goal: Demiplane-Comparable Platform¶
Primary Vision: - Professional character builder and sheet for the Kaernest TTRPG system - User accounts with save/share functionality (players → GMs) - Beautiful, readable, intuitive 4-page-max character sheet - PDF export capability - Visual design matching kaernest.com aesthetic
Current Status: ~85% complete character creation flow, solid foundation
📋 Character Creation System Requirements¶
Attribute System (MISSING - PRIORITY 1)¶
Source: https://kaernest.com/system/character_creation/attributes/
Rules: - 6 core attributes + 1 optional (Sorcery) - Vigor (physical might, endurance, defense) - Finesse (speed, agility, dodge) - Will (mental prowess, memory, defense) - Cunning (quick thinking, problem solving) - Presence (magnetism, long-term social, defense) - Influence (guile, short-term social) - Sorcery (magic connection - optional)
Starting Attributes: - Players have 25 points to spend - Cost table:
-1: 0 pts (refund 5)
0: 1 pt (costs 5 to raise)
1: 2 pts (costs 9 to raise)
2: 3 pts (costs 16 to raise)
3: 4 pts (costs 25 to raise)
4: 6 pts (costs 36 to raise)
5: 8 pts (costs 49 to raise)
6: 11 pts (cannot raise further)
What needs to be built: 1. Update speciesList.json with attribute bonuses (see below) 2. Create attribute purchase UI (25 point buy system) 3. Show calculated final attributes (base + species + background) 4. Handle leftover points → gift points conversion 5. Display in summary panel
Species System (NEEDS DATA UPDATE - PRIORITY 1)¶
Current Problem: speciesList.json is INCOMPLETE - Missing: attribute bonuses - Missing: 2 species advantages (gift-like traits)
Required Data Structure: Each species needs: 1. Attribute Bonus: +1 to specific attribute (cannot exceed 6 total) 2. Two Advantages: Trait/ability similar to gifts
Example - Dazhdvog: - Attribute Bonus: +1 Will - Advantage 1: Stonebound (resist forced movement - treat Impact as one level lower) - Advantage 2: Infravision (thermal vision in darkness)
Action Required: 1. Scrape/extract data from all 7 species pages: - https://kaernest.com/system/character_creation/species/dazhdvog_character_creation/ - https://kaernest.com/system/character_creation/species/fluvarri_character_creation/ - https://kaernest.com/system/character_creation/species/human_character_creation/ - https://kaernest.com/system/character_creation/species/kampanni_character_creation/ - https://kaernest.com/system/character_creation/species/qnassi_character_creation/ - https://kaernest.com/system/character_creation/species/sektarri_character_creation/ - https://kaernest.com/system/character_creation/species/verdanni_character_creation/
-
Update speciesSchema.json to include:
{ "attributeBonus": { "attribute": "will", "amount": 1 }, "advantages": [ { "id": "stonebound", "name": "Stonebound", "text": "When resisting forced movement..." }, { "id": "infravision", "name": "Infravision", "text": "Perceive heat and thermal contrast..." } ] } -
Display advantages in species picker
- Apply attribute bonus in attribute calculation
Relationships System (NEEDS DESIGN - PRIORITY 3)¶
Source: https://kaernest.com/system/core/intrigue/
Definition: Connections to people and factions
Data Structure Needed:
type Relationship = {
id: string;
type: "person" | "faction";
name: string;
connection: string; // nature of relationship
strength?: number; // 1-5 scale?
notes?: string;
};
UI Needed: - Add/edit/remove relationships - Distinguish between person and faction - Free-form text for connection description - Optional strength/influence rating
Questions: - Is there a formal relationship mechanic with rules? - Should strength be numeric or descriptive? - Are there relationship "types" (ally, rival, patron, etc.)?
Novice Bump Step (EASY - PRIORITY 2)¶
Source: https://kaernest.com/system/character_creation/character_creation/
Rule: After spending all creation points, player selects ONE Novice skill to promote to Apprentice rank
Purpose: Represents an interest/skill outside the character's background
Implementation:
1. Add noviceBumpSkillId: string | null to CharacterDraft
2. UI: Show list of skills at Novice rank
3. Allow selection of exactly one
4. Store selection
5. Display in review/summary
Time: ~30 minutes
Review/Export Step (NEEDED - PRIORITY 2)¶
Requirements: 1. Character Validation - All required identity fields filled - Species selected - Background selected - All attribute points spent - Required skills selected - Equipment chosen (if required)
-
Summary View - Complete character overview - All stats/bonuses calculated - Skills with final ranks displayed - Equipment listed - Motivations shown - Relationships listed
-
Export Functionality - JSON Export (immediate - for save/load) - PDF Export (future - nice to have) - Print View (CSS-optimized 4-page layout)
-
Validation Feedback - Red highlight missing required fields - Prevent export if incomplete - Guide user to incomplete sections
🎨 Design & Styling¶
Goal: Match kaernest.com aesthetic
Current Style Analysis: - Dark theme with purple accents - Clean, modern typography - Card-based layouts - Good use of spacing
Improvements Needed: 1. Extract color palette from kaernest.com 2. Match typography (fonts, sizes, weights) 3. Consistent spacing/padding 4. Better mobile responsiveness 5. Loading states and transitions 6. Error state designs
🏗️ Architecture & Technical Debt¶
Immediate Fixes¶
- Species data completion (attribute bonuses + advantages)
- Attribute calculation system (25-point buy)
- Attribute display in UI
- Novice bump implementation
Phase 2: Core Features¶
- Relationships system (design + implementation)
- Review/Export step with validation
- JSON export/import for character files
- localStorage persistence (auto-save)
Phase 3: Polish¶
- Character validation throughout flow
- Step completion indicators (green checkmarks)
- Undo/redo for major choices
- Better error handling and user feedback
- Loading states for data fetching
- Accessibility improvements (keyboard nav, ARIA)
Phase 4: Advanced Features¶
- User accounts (authentication)
- Character library (save multiple characters)
- Sharing (players → GMs)
- PDF generation (4-page character sheet)
- Character advancement system (post-creation)
- Background evolution tracking (journeyman/expert/master)
📄 Character Sheet Design (Future)¶
Requirements: - Maximum 4 pages printed - Beautiful and readable - Easy to fill out at table - Matches kaernest.com aesthetic
Page Layout (Draft):
Page 1: Identity & Core Stats - Name, species, background, role - Attributes with bonuses shown - Skills organized by rank - Species advantages - Basic equipment
Page 2: Combat & Abilities - Weapons with stats - Armor/shield details - Combat gifts - Harm tracks - Movement/defense calculations
Page 3: Magic & Advanced - Sorcery attribute (if applicable) - Magic gifts/abilities - Spells/preparations - Resource tracking (effort, etc.)
Page 4: Character & Notes - Motivations (foundations/ambitions) - Relationships - Background story - Session notes area - Equipment details
🎯 Implementation Priority¶
Phase 1: Complete Creation Flow (2-3 days)¶
Goal: Fully functional character creator
- ✅ Extract all 7 species data (attributes + advantages) - 2 hours
- ✅ Update speciesSchema.json and speciesList.json - 30 min
- ✅ Build Attributes Step UI (25-point buy) - 3 hours
- ✅ Implement attribute calculation logic - 1 hour
- ✅ Update Species Picker to show advantages - 30 min
- ✅ Implement Novice Bump step - 30 min
- ✅ Build basic Review step with validation - 2 hours
- ✅ Add JSON export/import - 1 hour
Total: ~10-11 hours of focused work
Phase 2: Persistence & UX (1-2 days)¶
Goal: Don't lose work, better experience
- ⏳ Add localStorage auto-save - 1 hour
- ⏳ Multiple character slots - 1 hour
- ⏳ Design Relationships system - 1 hour
- ⏳ Implement Relationships UI - 2 hours
- ⏳ Step completion indicators - 1 hour
- ⏳ Better error states - 1 hour
- ⏳ Loading indicators - 30 min
Total: ~7-8 hours
Phase 3: Polish & Design (2-3 days)¶
Goal: Professional appearance
- ⏳ Match kaernest.com styling - 3 hours
- ⏳ Mobile responsive design - 2 hours
- ⏳ Accessibility improvements - 2 hours
- ⏳ Animation/transitions - 1 hour
- ⏳ Print stylesheet (4-page) - 3 hours
Total: ~11 hours
Phase 4: Advanced (Future)¶
Goal: Full platform features
- ⏳ User authentication system
- ⏳ Backend API for character storage
- ⏳ Character sharing with GMs
- ⏳ PDF generation
- ⏳ Character advancement system
Total: 40+ hours (separate project phase)
🚀 Recommended Next Steps¶
Start Here (Day 1 - 4 hours): 1. Extract species data from all 7 pages (web scraping or manual) 2. Update speciesList.json with complete data 3. Test species picker displays advantages correctly
Then (Day 1-2 - 6 hours): 4. Build Attributes Step with 25-point buy UI 5. Implement attribute calculation (base + species + background) 6. Display final attributes in summary
Finally (Day 2-3 - 4 hours): 7. Quick Novice Bump implementation 8. Basic Review step with validation 9. JSON export button
After that: - Add localStorage persistence - Design/implement Relationships - Polish UI to match kaernest.com
📝 Data Collection Task¶
Immediate Need: Complete species data for all 7 species
| Species | URL | Status |
|---|---|---|
| Dazhdvog | Link | ✅ Example shown |
| Fluvarri | Link | ⏳ Need to extract |
| Human | Link | ⏳ Need to extract |
| Kampanni | Link | ⏳ Need to extract |
| Qnassi | Link | ⏳ Need to extract |
| Sektarri | Link | ⏳ Need to extract |
| Verdanni | Link | ⏳ Need to extract |
For each species, extract: 1. Attribute bonus (+1 to which attribute) 2. Advantage 1 (name + description) 3. Advantage 2 (name + description) 4. Size/movement notes (if mechanically relevant)
💡 Questions Still Pending¶
- Relationships: Is there a formal mechanic for relationship strength/influence?
- Attributes: Do backgrounds grant attribute bonuses beyond the choice system?
- Magic: How should Sorcery attribute be handled for non-magical characters?
- Equipment: Are there starting equipment restrictions based on background?
- Advancement: When does character creation "lock" vs advancement mode begin?
🎉 What's Working Well¶
- Clean React + TypeScript architecture
- Solid state management with Zustand
- Comprehensive data layer with schemas
- Most UI components functional
- Good separation of concerns
- Python linting tools for data validation
You're in a great position to finish this!