A lightweight single-page quest journal for The Elder Scrolls V: Skyrim.
The app runs entirely in the browser, stores quest data in localStorage, and provides a themed interface for tracking quest progress across main quests, factions, Daedric quests, side quests, and miscellaneous objectives.
- Browse quests by category from the sidebar
- Search quests by title, notes, or location
- Filter quests by status
- Sort quests by recent, title, status, or category
- Add, edit, complete, and delete quests
- Show quest prerequisites and branch tags for mutually exclusive paths
- Keep multiple named journals and switch between character playthroughs from the app header
- Duplicate or delete journals so old playthroughs can be forked or cleaned up |-- quest-data.js |-- tests.html |-- LICENSE `-- assets/
- `index.html`: App markup, journal controls, filters, backup actions, and modal form
- `styles.css`: Theme, layout, responsive rules, and interaction styling
- `app.js`: State management, journal selection, details rendering, filtering, sorting, CRUD actions, import/export, full backup handling, and reset behavior
- `quest-data.js`: Shared quest and journal normalization, migration, import/export, backup, filtering, sorting, summary, and journal-details rendering helpers
- `tests.html`: Lightweight browser test page for import parsing, normalization, filtering, sorting, malformed-store handling, legacy migration, backup handling, and journal helper behavior
- `LICENSE`: Repository license terms
- `assets/`: Static visual assets such as the parchment background
Examples:
```powershell
cd c:\Users\User\Documents\Projects\Skyrim-Tracker
start index.html
If you use VS Code, opening the file in a browser or using a simple live server extension is sufficient.
The app initializes with a broader set of default quests, including several decision-dependent quest branches, and stores them inside named journals in localStorage.
Data is normalized on load so malformed or incomplete entries do not break the app. Legacy single-journal saves are migrated into the newer named-journal format automatically. If saved quest data cannot be parsed, the app falls back to the default journal.
Each quest can optionally include prerequisites, branchGroup, and branch metadata. The UI uses those fields to surface quest chains and mutually exclusive routes directly on the quest cards.
Each journal also tracks createdAt and updatedAt metadata. The app surfaces that data in the journal details panel alongside active, completed, and not-started quest counts for every saved playthrough.
New Journalcreates another named playthrough using the built-in starter journal.Rename Journalupdates the active playthrough name.Duplicate Journalforks the active playthrough into a new named journal with copied quests.Delete Journalremoves the active playthrough as long as at least one journal remains.Import Journalaccepts either a Skyrim Tracker export file or a plain JSON quest array and saves it as a named journal.Export Journaldownloads the currently selected journal as a JSON file, including its journal name and journal timestamps.Import Backupreplaces the full journal list from a Skyrim Tracker backup file containing all playthroughs.Export Backupdownloads a single backup file containing every saved journal plus the active-journal selection.Reset Journalrestores only the active journal back to the built-in default quests and clears active filters.
The exported files are intended as lightweight backups of your local journal state.
- Add lightweight tests for quest card rendering behavior and the journal details panel UI
- Track explicit quest-level timestamps if you want recent sorting to survive imports and edits more precisely
- Import a saved journal into a named playthrough slot
- Export the current journal as JSON
- Reset the journal back to a broader starter journal with main, faction, Daedric, side, and branching quests
Export Journaldownloads the currently selected journal as a JSON file, including its journal name and journal timestamps. |-- styles.css |-- app.js |-- quest-data.js
Each journal also tracks createdAt and updatedAt metadata. The app surfaces that data in the journal details panel alongside active, completed, and not-started quest counts for every saved playthrough.
index.html: App markup, filters, controls, and modal formstyles.css: Theme, layout, responsive rules, and interaction stylingtests.html: Lightweight browser test page for import parsing, normalization, filtering, sorting, and journal helper behaviorassets/: Static visual assets such as the parchment background
No build step or dependency installation is required.
- Open
index.htmldirectly in a browser. - Or serve the folder with any simple static file server if you prefer.
- Open
tests.htmlin a browser whenever you want to run the lightweight helper tests.
Examples:
cd c:\Users\User\Documents\Projects\Skyrim-Tracker
start index.htmlIf you use VS Code, opening the file in a browser or using a simple live server extension is sufficient.
The app initializes with a broader set of default quests, including several decision-dependent quest branches, and stores them inside named journals in localStorage.
Data is normalized on load so malformed or incomplete entries do not break the app. Legacy single-journal saves are migrated into the newer named-journal format automatically. If saved quest data cannot be parsed, the app falls back to the default journal.
Each quest can optionally include prerequisites, branchGroup, and branch metadata. The UI uses those fields to surface quest chains and mutually exclusive routes directly on the quest cards.
New Journalcreates another named playthrough using the built-in starter journal.Rename Journalupdates the active playthrough name.Duplicate Journalforks the active playthrough into a new named journal with copied quests.Delete Journalremoves the active playthrough as long as at least one journal remains.Import Journalaccepts either a Skyrim Tracker export file or a plain JSON quest array and saves it as a named journal.Export Journaldownloads the currently selected journal as a JSON file, including its journal name.Reset Journalrestores only the active journal back to the built-in default quests and clears active filters.
The exported file is intended as a lightweight backup of your local journal state.
- Data is stored per browser, not synced across devices
- The included test page covers shared helper logic, not full UI interactions or DOM rendering
Recently Addedsorting uses current in-memory order rather than explicit timestamps
- Track
createdAtandupdatedAtmetadata for stronger sorting behavior - Add lightweight tests for journal import/export edge cases and quest card rendering behavior
This fan-made tracker is inspired by The Elder Scrolls V: Skyrim.
Skyrim, The Elder Scrolls, and related names, world elements, and assets belong to Bethesda Softworks.
This repository includes a LICENSE file with the project license terms.