5.1 KiB
5.1 KiB
Technical Plan
Project Identifiers
- Official app name: Steam Backlog Helper
- Repository name:
steam-backlog-helper - Package ID:
com.boris.backloghelper - Internal slug:
backlog-helper
Stack
The project will use:
- Desktop shell: Tauri
- Frontend: Svelte/SvelteKit with TypeScript
- Styling: scoped Svelte styles or a small shared CSS layer
- Local database: SQLite
- Backend/runtime language: Rust through Tauri commands
Tauri is preferred because small app size matters. Flutter remains a possible fallback only if Tauri becomes a poor fit during implementation.
Proposed Architecture
Desktop App
Frontend UI
Setup flow
Recommendation flow
Slot-machine picker
Settings for API keys and refresh
App Service Layer
Steam import
Metadata enrichment
Recommendation engine
Local persistence
Local SQLite Database
Games
Game length estimates
Metadata cache
Settings
Credential references
Key Modules
Steam Integration
Responsibilities:
- Resolve Steam profile inputs.
- Fetch owned games.
- Guide the user through Steam Web API key setup.
- Handle API errors and private profile failures.
- Normalize Steam app IDs and playtime.
- Refresh cached data.
- Create Steam launch URLs for selected app IDs.
Metadata Service
Responsibilities:
- Attach display images.
- Attach genres and tags where available.
- Attach public Steam review data where available.
- Attach estimated time-to-beat through a HowLongToBeat-compatible provider.
- Track metadata freshness.
- Exclude demos, tools, soundtracks, and DLC from recommendations by default.
Recommendation Engine
Responsibilities:
- Score candidate games based on the short questionnaire.
- Explain the score in human-readable terms.
- Support a true-random mode that bypasses weighted scoring.
- Return a ranked dynamic shortlist and one primary recommendation.
- Keep mood tagging, history, and accepted/rejected tracking out of the MVP.
Local Persistence
Responsibilities:
- Store library cache.
- Store metadata cache.
- Store app settings.
- Store encrypted or OS-protected API credentials if practical.
- Avoid import/export until a later release.
Data Model Draft
games
steam_app_idnameplaytime_minuteslast_played_atimage_urlgenrestagsreview_scoreis_free_to_playis_excluded_typemetadata_updated_at
game_lengths
steam_app_idmain_minutesmain_extra_minutescompletionist_minutessourceconfidenceupdated_at
app_settings
keyvalue_json
credentials
keystorage_refupdated_at
Recommendation Strategy Draft
Start with a transparent weighted scoring system rather than machine learning.
Example scoring inputs:
- Positive weight for matching selected genre or tag.
- Positive weight for fitting available session time.
- Positive weight for partially played games in "finish something" mode.
- Positive weight for unplayed games in "try something new" mode.
- Positive weight for meeting the user's review-score preference.
- Negative weight for extremely long games in short-session mode.
- Hard exclusion for demos, tools, soundtracks, and DLC.
The UI should show concise explanations such as:
- "Picked because it is unplayed, highly tagged as puzzle, and fits a short session."
- "Picked because you already started it and have less than five hours estimated remaining."
Implementation Phases
Phase 0: Repository Foundation
- Add project documentation.
- Add
AGENTS.md,SECURITY.md, and contribution guidance. - Initialize Git when the owner is ready.
Phase 1: Project Skeleton
- Initialize the desktop app.
- Add linting, formatting, and test scripts.
- Create the setup and picker shell.
- Add local database migrations.
Phase 2: Steam Library Import
- Implement Steam profile input.
- Implement Steam Web API key settings.
- Fetch and cache owned games.
- Normalize games for recommendation use.
- Add refresh handling and error states.
Phase 3: Metadata Enrichment
- Fetch Steam Store metadata.
- Fetch public review signals where available.
- Integrate a HowLongToBeat-compatible source after validating terms and package health.
- Cache metadata locally with refresh timestamps.
Phase 4: Recommendations
- Implement the short-question flow.
- Add scoring and explanations.
- Add true-random toggle behavior.
- Add slot-machine reveal.
- Add Steam launch links.
Phase 5: Packaging
- Configure Windows, macOS, and Linux AppImage builds.
- Add Gitea runner workflows.
- Keep arm64 builds local.
- Allow x86 builds on runners.
- Add app icons and metadata.
- Attempt self-signing where practical.
- Prepare release artifacts for personal Gitea releases.
Development Standards
- TypeScript should be strict.
- User data should be stored locally by default.
- API failures should have clear recovery paths.
- Recommendation logic should be unit tested.
- Data migrations should be repeatable and versioned.
- Featureful code should have useful coverage; do not chase coverage for empty scaffolding.
- Keyboard accessibility is required for the setup and recommendation flow.