Bare minimum functionality. Steam Web API, tag weighting, etc
This commit is contained in:
1 parent
300a5e53e3
commit
233f0dc48d
82 files changed
+15666
-9
No files matched your search
@@ -24,10 +24,10 @@ Goal: create the first runnable desktop application.
|
||||
|
||||
Deliverables:
|
||||
|
||||
- Tauri app scaffold using `Steam Backlog Helper` as the display name and `com.boris.backloghelper` as the package ID.
|
||||
- Svelte/SvelteKit frontend with TypeScript.
|
||||
- Basic app shell with setup, picker, and settings routes or views.
|
||||
- Lint, format, typecheck, and test commands.
|
||||
- Tauri app scaffold using `Steam Backlog Helper` as the display name and `com.boris.backloghelper` as the package ID. Initial shell complete.
|
||||
- Svelte/SvelteKit frontend with TypeScript. Initial shell complete.
|
||||
- Basic app shell with setup, picker, and settings routes or views. Setup and picker shell complete; settings route pending.
|
||||
- Lint, format, typecheck, and test commands. Typecheck and build scripts complete; formatting and test scripts pending.
|
||||
- Initial SQLite migration system.
|
||||
|
||||
Exit criteria:
|
||||
@@ -45,6 +45,8 @@ Deliverables:
|
||||
- Steam profile input supporting Steam ID, vanity URL, or profile URL.
|
||||
- User-provided Steam Web API key setup.
|
||||
- Owned-games fetch.
|
||||
- Store metadata lookup during import to identify Steam app type.
|
||||
- Default exclusion of tools, DLC, demos, soundtracks, and other non-game app types.
|
||||
- Library cache in SQLite.
|
||||
- Clear failure states for invalid keys, private profiles, rate limits, and network failures.
|
||||
|
||||
@@ -65,6 +67,7 @@ Deliverables:
|
||||
- HowLongToBeat-compatible completion-time integration after validation.
|
||||
- Metadata cache with freshness timestamps.
|
||||
- Default filtering for demos, tools, soundtracks, and DLC.
|
||||
- Single-player and multiplayer/co-op category detection.
|
||||
|
||||
Exit criteria:
|
||||
|
||||
@@ -79,6 +82,8 @@ Deliverables:
|
||||
|
||||
- Short-question recommendation flow.
|
||||
- Weighted scoring using available time, optional genre, completion preference, review score, and playtime.
|
||||
- Hard eligibility filters for candidate removal.
|
||||
- Preferred filters for review signal, single-player/multiplayer, genre, and playtime weighting.
|
||||
- True-random toggle that bypasses weighted scoring.
|
||||
- Dynamic shortlist output.
|
||||
- Human-readable recommendation explanations.
|
||||
@@ -97,7 +102,7 @@ Goal: make the primary workflow feel focused and polished.
|
||||
Deliverables:
|
||||
|
||||
- Recommendation-first home screen.
|
||||
- Slot-machine style reveal for the primary recommendation.
|
||||
- Spinning-wheel reveal for the primary recommendation.
|
||||
- Keyboard-accessible controls.
|
||||
- Steam app ID launch links.
|
||||
- Responsive desktop layout for common window sizes.
|
||||
|
||||
@@ -75,7 +75,7 @@ This file preserves the planning answers that shaped the current implementation
|
||||
2. Should the first screen be the recommendation flow or the full library?
|
||||
The first screen should be recommendations.
|
||||
3. Should there be a visual picker mode such as a wheel, cards, or slot-machine style animation?
|
||||
Use a slot-machine style animation.
|
||||
Use a spinning-wheel picker.
|
||||
4. Should keyboard navigation be a priority?
|
||||
Yes. The app should be accessible via keyboard.
|
||||
|
||||
|
||||
+12
-2
@@ -26,7 +26,7 @@ Desktop App
|
||||
Frontend UI
|
||||
Setup flow
|
||||
Recommendation flow
|
||||
Slot-machine picker
|
||||
Spinning-wheel picker
|
||||
Settings for API keys and refresh
|
||||
App Service Layer
|
||||
Steam import
|
||||
@@ -49,6 +49,7 @@ Responsibilities:
|
||||
|
||||
- Resolve Steam profile inputs.
|
||||
- Fetch owned games.
|
||||
- Fetch Steam Store metadata for owned apps so tools, DLC, demos, and other non-game app types can be excluded before recommendation.
|
||||
- Guide the user through Steam Web API key setup.
|
||||
- Handle API errors and private profile failures.
|
||||
- Normalize Steam app IDs and playtime.
|
||||
@@ -72,6 +73,8 @@ Responsibilities:
|
||||
|
||||
- Score candidate games based on the short questionnaire.
|
||||
- Explain the score in human-readable terms.
|
||||
- Apply hard eligibility filters before scoring.
|
||||
- Apply preferred filters as weighting only, not as inclusion/exclusion rules.
|
||||
- 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.
|
||||
@@ -100,6 +103,8 @@ Responsibilities:
|
||||
- `review_score`
|
||||
- `is_free_to_play`
|
||||
- `is_excluded_type`
|
||||
- `supports_singleplayer`
|
||||
- `supports_multiplayer`
|
||||
- `metadata_updated_at`
|
||||
|
||||
### game_lengths
|
||||
@@ -131,11 +136,13 @@ Example scoring inputs:
|
||||
|
||||
- Positive weight for matching selected genre or tag.
|
||||
- Positive weight for fitting available session time.
|
||||
- Positive weight for matching preferred single-player or multiplayer mode.
|
||||
- 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.
|
||||
- Hard exclusion only for explicit eligibility filters; review, mode, genre, and playtime preferences should not remove candidates by themselves.
|
||||
|
||||
The UI should show concise explanations such as:
|
||||
|
||||
@@ -169,6 +176,7 @@ The UI should show concise explanations such as:
|
||||
|
||||
- Fetch Steam Store metadata.
|
||||
- Fetch public review signals where available.
|
||||
- Exclude non-game Steam app types before they enter the wheel.
|
||||
- Integrate a HowLongToBeat-compatible source after validating terms and package health.
|
||||
- Cache metadata locally with refresh timestamps.
|
||||
|
||||
@@ -176,8 +184,10 @@ The UI should show concise explanations such as:
|
||||
|
||||
- Implement the short-question flow.
|
||||
- Add scoring and explanations.
|
||||
- Add eligibility filters that can remove games from the candidate pool.
|
||||
- Add preferred filters for review signal, single-player/multiplayer, genre, and playtime weighting.
|
||||
- Add true-random toggle behavior.
|
||||
- Add slot-machine reveal.
|
||||
- Add spinning-wheel reveal.
|
||||
- Add Steam launch links.
|
||||
|
||||
### Phase 5: Packaging
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
# Goals
|
||||
|
||||
## Filtering
|
||||
|
||||
- Exclude all non-games by default, including tools, DLC, demos, soundtracks, and other Steam app types where Store metadata reports a non-`game` type.
|
||||
- Keep hard eligibility filters separate from preference weighting:
|
||||
- Eligibility filters remove games from the wheel entirely.
|
||||
- Preferred filters adjust scoring and weighted selection without removing games.
|
||||
- Add general-question-driven eligibility filters that can exclude games from the candidate set.
|
||||
- Add preferred filters for:
|
||||
- Steam review signal, from Overwhelmingly Positive through Negative/Mixed options.
|
||||
- Single-player preference.
|
||||
- Multiplayer/co-op preference.
|
||||
- Genre preference.
|
||||
- Playtime preference.
|
||||
|
||||
A 'find a game' mode, specified in the top bar, should run through a random amount of games (minimum 20) to programmatically find the best game for the user; each game should be thumbs up or thumbs down, or neutral. Neutral should add another game to be rated and not counted towards any weighting. Weighting should impact the next recommendation via the tags associated with them (genre, singleplayer/multiplayer, steam tags, etc.) This should take the form of the wheel for now, but may be changed in the future.
|
||||
Reference in new issue
Block a user