Skip to content

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)
- Cap at 6 even after species/background bonuses - Leftover points (even 1-10) → extra 1 point toward Gifts - Species bonuses applied AFTER initial purchase - Background bonuses applied AFTER species

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/

  1. 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..."
        }
      ]
    }
    

  2. Display advantages in species picker

  3. 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)

  1. Summary View - Complete character overview - All stats/bonuses calculated - Skills with final ranks displayed - Equipment listed - Motivations shown - Relationships listed

  2. Export Functionality - JSON Export (immediate - for save/load) - PDF Export (future - nice to have) - Print View (CSS-optimized 4-page layout)

  3. 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

  1. Species data completion (attribute bonuses + advantages)
  2. Attribute calculation system (25-point buy)
  3. Attribute display in UI
  4. Novice bump implementation

Phase 2: Core Features

  1. Relationships system (design + implementation)
  2. Review/Export step with validation
  3. JSON export/import for character files
  4. localStorage persistence (auto-save)

Phase 3: Polish

  1. Character validation throughout flow
  2. Step completion indicators (green checkmarks)
  3. Undo/redo for major choices
  4. Better error handling and user feedback
  5. Loading states for data fetching
  6. Accessibility improvements (keyboard nav, ARIA)

Phase 4: Advanced Features

  1. User accounts (authentication)
  2. Character library (save multiple characters)
  3. Sharing (players → GMs)
  4. PDF generation (4-page character sheet)
  5. Character advancement system (post-creation)
  6. 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

  1. ✅ Extract all 7 species data (attributes + advantages) - 2 hours
  2. ✅ Update speciesSchema.json and speciesList.json - 30 min
  3. ✅ Build Attributes Step UI (25-point buy) - 3 hours
  4. ✅ Implement attribute calculation logic - 1 hour
  5. ✅ Update Species Picker to show advantages - 30 min
  6. ✅ Implement Novice Bump step - 30 min
  7. ✅ Build basic Review step with validation - 2 hours
  8. ✅ 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

  1. ⏳ Add localStorage auto-save - 1 hour
  2. ⏳ Multiple character slots - 1 hour
  3. ⏳ Design Relationships system - 1 hour
  4. ⏳ Implement Relationships UI - 2 hours
  5. ⏳ Step completion indicators - 1 hour
  6. ⏳ Better error states - 1 hour
  7. ⏳ Loading indicators - 30 min

Total: ~7-8 hours

Phase 3: Polish & Design (2-3 days)

Goal: Professional appearance

  1. ⏳ Match kaernest.com styling - 3 hours
  2. ⏳ Mobile responsive design - 2 hours
  3. ⏳ Accessibility improvements - 2 hours
  4. ⏳ Animation/transitions - 1 hour
  5. ⏳ Print stylesheet (4-page) - 3 hours

Total: ~11 hours

Phase 4: Advanced (Future)

Goal: Full platform features

  1. ⏳ User authentication system
  2. ⏳ Backend API for character storage
  3. ⏳ Character sharing with GMs
  4. ⏳ PDF generation
  5. ⏳ Character advancement system

Total: 40+ hours (separate project phase)


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

  1. Relationships: Is there a formal mechanic for relationship strength/influence?
  2. Attributes: Do backgrounds grant attribute bonuses beyond the choice system?
  3. Magic: How should Sorcery attribute be handled for non-magical characters?
  4. Equipment: Are there starting equipment restrictions based on background?
  5. 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!