Last Updated: 2026-02-16 Version: 1.0.0 Author: EtherealCarnivore Status: Active Development
- System Overview
- Architecture Principles
- Technology Stack
- Project Structure
- Component Architecture
- Design System
- Data Flow & Integration
- Build & Deployment
- Development Workflow
- Quality & Standards
- Roadmap & Evolution
- References & Credits
Project Omnilyth is an all-in-one toolkit for Path of Exile players, consolidating crafting calculators, atlas tools, and economy utilities into a unified dark-mode interface.
Problem Solved: Eliminates the need for 47+ browser tabs by providing integrated, real-time game utilities in one place.
This repository (omnilyth-core-public) contains the production build and deployment artifacts.
┌─────────────────────────────────────────────────┐
│ Private Source Repo (project-omnilyth) │
│ - React/TypeScript source code │
│ - Vite configuration │
│ - Component development │
└────────────────┬────────────────────────────────┘
│ npm run build
↓
┌─────────────────────────────────────────────────┐
│ Public Deployment Repo (omnilyth-core-public) │ ← YOU ARE HERE
│ - Built/compiled assets only │
│ - index.html entry point │
│ - Minified JS/CSS bundles │
└────────────────┬────────────────────────────────┘
│ GitHub Pages
↓
┌─────────────────────────────────────────────────┐
│ Live Site │
│ https://etherealcarnivore.github.io/ │
│ omnilyth-core-public/ │
└─────────────────────────────────────────────────┘
Deployment Model: Build artifacts are pushed to this public repo, then served via GitHub Pages.
- URL: https://etherealcarnivore.github.io/omnilyth-core-public/
- Deployment Path:
/the-omilyth/(subdirectory) - Hosting: GitHub Pages (automatic deployment from
gh-pagesbranch)
- Dark-First Design - PoE-themed dark mode is primary, light mode optional
- Modular Tools - Each calculator/utility is self-contained
- Live Data Integration - Real-time pricing from poe.ninja
- Performance Optimized - Minified production builds with content hashing
- Community Focused - Transparent development, proper attribution
- Mobile Ready - Responsive design (in progress)
- "As simple as possible, but no simpler" - Complex game calculations made accessible
- No Authentication - Public tools, no user accounts needed
- Privacy First - Cookie-based preferences only, no tracking
- PoE Community Tone - Humor, honesty, and game culture references
| Technology | Version | Purpose |
|---|---|---|
| React | 18+ | UI component framework |
| Vite | Latest | Build tool & dev server |
| Tailwind CSS | 4.x | Utility-first styling |
| TypeScript | Latest | Type-safe development (source) |
- Bundler: Vite (module preloading, content hashing)
- Minification: Production optimized (CSS: 379KB, JS: 390KB)
- Hosting: GitHub Pages
- CI/CD: Automated deployment from main branch
- poe.ninja API - Live price data for currency/items
- PoE Trade Links - Direct trade search integration
omnilyth-core-public/
├── .git/ # Git repository metadata
├── assets/ # Compiled build artifacts
│ ├── index-{HASH}.css # Tailwind CSS bundle (379KB)
│ └── index-{HASH}.js # React app bundle (390KB)
├── README.md # User-facing documentation
├── ARCHITECTURE.md # THIS FILE - Technical documentation
├── index.html # Entry point (691B)
├── Chromatic_Orb.png # Favicon (8KB)
├── Omen_of_Blanching.png # Feature image (14KB)
└── banner.png # Hero banner (922KB)
Note: Content hashes ({HASH}) change with each build for cache busting.
project-omnilyth/ (Private)
├── src/
│ ├── components/ # React components
│ │ ├── calculators/ # Calculator modules
│ │ ├── layout/ # Layout components
│ │ └── ui/ # Reusable UI elements
│ ├── utils/ # Helper functions
│ ├── api/ # poe.ninja integration
│ ├── hooks/ # Custom React hooks
│ ├── styles/ # Tailwind config & custom CSS
│ └── App.tsx # Main application
├── public/ # Static assets
├── vite.config.ts # Vite configuration
├── tailwind.config.js # Tailwind configuration
├── tsconfig.json # TypeScript config
└── package.json # Dependencies
- Chromatic Calculator - Vorici bench vs raw chromes
- Tainted Chromatic - Corrupted item coloring
- Omen of Blanching - White socket probability
- Jeweller's Method - Socket trick calculator
- Fusing Calculator - 6-link probability with Omen of Connections
- Socket Calculator - Jeweller's Orb math
- Item Mod Regex Generator - Stash search patterns
- Cluster Jewel Calculator - Notable compatibility checker
- Map Mod Regex Generator - Map modifier search patterns
- Timeless Jewel Calculator - Skill tree seed searching
Calculator Component Structure:
Calculator Module
├── Input Fields (socket count, colors, item type)
├── Cost Calculation Logic (real-time)
├── poe.ninja Price Fetching (async)
├── Results Display (comparison table)
└── Export/Copy Functionality
Common UI Components:
.calc-input- Styled input fields.calc-button- Action buttons with hover states.glass-card- Card containers with backdrop blur.result-row- Table row styling with alternating colors
--bg-primary: #0a0a0a /* Main background */
--bg-card: #222324 /* Card/container background */
--bg-input: #444444 /* Input field background */
--border: #555555 /* Border color */
--text-primary: #f0f0f0 /* Main text */
--text-muted: #999999 /* Secondary text */
--poe-gold: #daa520 /* PoE-specific accent */--bg-primary: #f0f0f0
--bg-card: #ffffff
--bg-input: #e8e8e8
--text-primary: #1a1a1a
--text-muted: #666666Font Stacks:
- Sans-serif: System UI, Inter, Segoe UI, Roboto, Arial
- Monospace: UI Monospace, SFMono, Menlo, Monaco
Font Sizes: .75rem to 2.25rem (12px to 36px)
Font Weights: Medium (500), Semibold (600), Bold (700)
Breakpoints:
sm- 640px (40rem) - Mobile landscapelg- 1024px (64rem) - Desktop
Status: Mobile optimization currently in progress (partially functional)
- Default Transition: 150ms cubic-bezier(0.4, 0, 0.2, 1)
- Hover Effects: Brightness 110-125%, transform scale
- Glass Effect:
backdrop-blur(8px)+ gradient + transparency - Pulse Animation: 2s infinite for loading states
Purpose: Real-time pricing for currency items
Flow:
Component Mount
↓
Fetch poe.ninja API
↓
Parse JSON Response
↓
Update State (currency prices)
↓
Calculate Costs
↓
Display Results
Endpoints Used:
/api/data/currencyoverview?league={league}&type=Currency/api/data/itemoverview?league={league}&type=DivinationCard(if needed)
Error Handling: Fallback to cached prices or default values
Pattern: React Hooks (useState, useEffect, custom hooks)
State Hierarchy:
App State (Global)
├── Theme (dark/light)
├── League Selection (current PoE league)
└── Pinned Tools (cookie-based)
Calculator State (Local)
├── Input Values
├── Fetched Prices
├── Calculated Results
└── UI State (loading, errors)
Purpose: Cookie-based storage for saving and managing regex patterns across all tools
Architecture:
┌──────────────────────────────────────────────────────┐
│ Regex Tools (Map Mods, Gems, Scarabs, etc.) │
│ - Generate regex patterns │
│ - SaveRegexButton component │
└────────────────┬─────────────────────────────────────┘
│
↓ useRegexLibrary hook
┌──────────────────────────────────────────────────────┐
│ Cookie Storage Layer (src/utils/regexLibrary.js) │
│ - CRUD operations (add, update, delete, clearAll) │
│ - Storage validation (4KB limit) │
│ - Pattern deduplication │
│ - Auto-generated UUIDs │
└────────────────┬─────────────────────────────────────┘
│
↓ Browser Cookies
┌──────────────────────────────────────────────────────┐
│ Cookie: omnilyth_regex_library │
│ - Max size: ~4KB (~50 patterns) │
│ - Max age: 365 days │
│ - SameSite: Strict │
│ - Structure: {version: 1, patterns: [...]} │
└──────────────────────────────────────────────────────┘
Data Schema:
{
version: 1,
patterns: [
{
id: "uuid-v4",
name: "User-provided name",
pattern: "regex pattern string",
tool: "tool-id", // e.g., "map-mods", "gem-regex"
toolLabel: "Display name", // e.g., "Map Mod Regex"
createdAt: "ISO timestamp",
updatedAt: "ISO timestamp"
}
]
}Components:
- SaveRegexButton (
src/components/SaveRegexButton.jsx) - Reusable save button with modal - RegexLibraryPage (
src/pages/RegexLibraryPage.jsx) - Library management interface - useRegexLibrary (
src/hooks/useRegexLibrary.js) - React hook for state management
Features:
- 80% storage capacity warnings
- Duplicate pattern detection
- Real-time search and filtering
- Tool-based categorization
- One-click copy to clipboard
- Confirmation dialogs for destructive actions
- WCAG 2.1 AA accessibility compliance
Storage Limits:
- Maximum cookie size: 4KB (browser limit)
- Estimated capacity: 50-60 patterns
- Warning threshold: 80% (3.2KB)
- Pattern name limit: 50 characters
Client-Side Only:
- Cookies - Theme preference, pinned tools
- Local Storage - Calculator history (future)
- No Backend - No server-side storage
Source Repo → Build → Deploy Repo:
# In private source repo (project-omnilyth)
npm run build
# Vite builds to dist/
dist/
├── assets/
│ ├── index-{HASH}.css
│ └── index-{HASH}.js
├── index.html
└── [static assets]
# Push dist/ contents to omnilyth-core-public repo
git add .
git commit -m "Deploy: project-omnilyth@{COMMIT_HASH}"
git push origin main
# GitHub Pages automatically deploys from gh-pages branchGitHub Pages Settings:
- Source Branch:
gh-pages - Build Tool: None (pre-built files)
- Custom Domain: Not configured
- HTTPS: Enforced
Base Path: /the-omilyth/ (configured in Vite)
Content Hash Versioning:
- Vite generates unique hashes for each build
index-DPCNhmp3.js→index-{NEW_HASH}.js- Ensures browser cache invalidation on updates
Git Tagging: Not currently used (consider for releases)
To Rollback Deployment:
# From omnilyth-core-public repo
git log --oneline # Find previous working commit
git revert {COMMIT_HASH} # Or git reset --hard {COMMIT_HASH}
git push origin main --force # Force push if using resetSource Repo Setup:
git clone <private-repo-url>
cd project-omnilyth
npm install
npm run dev # Vite dev server at localhost:5173Hot Module Replacement: Enabled via Vite for instant updates
Commands:
npm run dev- Start dev server with HMRnpm run build- Production buildnpm run preview- Preview production build locallynpm run lint- Run ESLint (if configured)
Branch Strategy:
- main - Production-ready code
- feature/{name} - New features
- fix/{name} - Bug fixes
Commit Convention:
feat: Add new calculator module
fix: Correct Omen of Connections pricing
docs: Update README with new features
deploy: EtherealCarnivore/project-omnilyth@{HASH}
Current: Manual testing only Planned:
- Unit tests for calculation logic
- Integration tests for API calls
- Visual regression testing for UI components
TypeScript (Source):
- Strict mode enabled
- No implicit any
- Explicit return types for functions
React:
- Functional components with hooks
- PropTypes or TypeScript interfaces
- Consistent file naming (PascalCase for components)
CSS:
- Tailwind utility classes preferred
- Custom CSS only for complex animations
- BEM naming for custom classes (if any)
Bundle Size:
- CSS: 379KB (acceptable for utility framework)
- JS: 390KB (includes React + all calculators)
- Target: Keep under 500KB combined
Lighthouse Scores (Target):
- Performance: 90+
- Accessibility: 95+
- Best Practices: 100
- SEO: 100
Current Implementation:
- Semantic HTML (
<button>,<input>,<label>) - Focus states for keyboard navigation
- Color contrast ratios (AA standard)
- Alt text for images
To Improve:
- ARIA labels for complex interactions
- Screen reader testing
- Keyboard shortcuts for power users
Target Browsers:
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile Safari (iOS 14+)
- Chrome Android (latest)
Not Supported:
- Internet Explorer (deprecated)
- Opera Mini (limited JS support)
Live Features:
- ✅ 4 Coloring calculators
- ✅ 2 Linking/Socketing calculators
- ✅ 2 Item/Jewel tools
- ✅ 1 Atlas/Mapping tool
- ✅ 1 External tool integration
- ✅ poe.ninja live pricing
- ✅ Dark theme
- ✅ GitHub Pages deployment
| Priority | Feature | Status | ETA |
|---|---|---|---|
| HIGH | Mobile UI Optimization | 🚧 In Progress | Q1 2026 |
| HIGH | Fix Calculator Bugs | 🚧 In Progress | Q1 2026 |
| MEDIUM | Timeless Jewel Improvements | 📋 Planned | Q2 2026 |
Near-Term (Q1-Q2 2026):
- Pinning Functionality (cookie-based dashboard favorites)
- Better Category Split & Visual Organization
- Additional Category Coloring
- Deeper poe.ninja API Integration
Mid-Term (Q3-Q4 2026):
- Vendor Recipes Reference Tool
- Trade Macro Integration
- Build Planner Integration
- Community Presets/Sharing
Long-Term (2027+):
- User Accounts (optional)
- Saved Calculator Configurations
- Historical Price Charts
- Mobile App (React Native?)
Known Issues:
- Mobile responsiveness needs refactor
- Omen of Connections missing price info
- No automated testing
- Bundle size could be optimized (code splitting)
- No error boundary implementation
Refactoring Priorities:
- Extract calculator logic to shared utilities
- Implement proper TypeScript interfaces
- Add unit tests for calculation functions
- Optimize bundle with dynamic imports
- Implement error boundaries
Base Project:
- Siveran's Chromatic Calculator
- Repository: https://github.com/Siveran/siveran.github.io
- License: MIT (assumed)
- Used: Chromatic calculation algorithms
Timeless Jewel Calculator:
- vilsol/timeless-jewels
- Repository: https://github.com/vilsol/timeless-jewels
- License: MIT
- Used: Skill tree integration
-
poe.ninja - Currency and item pricing data
- API Documentation: https://poe.ninja/api
- Rate Limits: Unknown (use caching)
- Attribution: Required in UI
-
PoE Trade - Official trade site integration
- Path of Exile UI - Color palette and theming
- PoE Overlay - Tool organization patterns
- Awakened PoE Trade - Pricing display format
- r/pathofexile - User feedback and feature requests
- PoE Discord - Community testing and bug reports
Not Currently Used - All configuration is build-time constants.
Future Consideration:
VITE_POE_NINJA_API_URL=https://poe.ninja/api/data
VITE_DEFAULT_LEAGUE=Necropolis
VITE_ANALYTICS_ID=UA-XXXXXX-X (optional)Current: None Planned: Google Analytics or privacy-focused alternative (Plausible)
Metrics to Track:
- Page views per calculator
- Average session duration
- Most used tools
- Error rates
- API response times
Current Security Model:
- No user authentication → No password vulnerabilities
- Client-side only → No server-side attacks
- No sensitive data storage → No data breaches
- HTTPS enforced → Man-in-the-middle protection
Potential Risks:
- XSS via user input (mitigated by React's built-in escaping)
- API rate limiting (poe.ninja could block excessive requests)
- Supply chain attacks (npm dependencies)
Best Practices:
- Regular dependency updates (
npm audit) - Content Security Policy headers
- Subresource Integrity for CDN assets
- Regular security audits
| Date | Version | Changes | Author |
|---|---|---|---|
| 2026-02-16 | 1.0.0 | Initial architecture document | EtherealCarnivore |
Maintainer: EtherealCarnivore Repository: https://github.com/EtherealCarnivore/omnilyth-core-public Issues: GitHub Issues (for bug reports) Contributions: Open to pull requests (source repo only)
"One architecture document to rule them all, one document to find them, one document to bring all the devs together, and in the markdown bind them."