Skip to content

Commit 88a97cf

Browse files
committed
Merge feat-autonomous-program into deploy
- Combine desktop application features with filter system improvements - Resolve conflicts in CHANGELOG (merged both feature sets) - Resolve conflicts in README (preserve deploy structure, add desktop section) - Resolve conflicts in web/main.py (include both jobs and loading routers) - Resolve conflicts in openspec/config.yaml (keep deploy version with full context)
2 parents 09159cb + aaf3c20 commit 88a97cf

File tree

37 files changed

+2401
-267
lines changed

37 files changed

+2401
-267
lines changed

.github/RELEASE_TEMPLATE.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Backlogia v{VERSION} - Desktop Edition
2+
3+
## 🎮 What's New
4+
5+
This release introduces **Desktop Application Mode**, allowing you to run Backlogia as a standalone native application on Windows, macOS, and Linux.
6+
7+
### ✨ Key Features
8+
9+
- **Native Desktop App** - Run Backlogia without opening a browser
10+
- **Elegant Loading Screen** - Beautiful animated startup experience
11+
- **Persistent Data** - Your library and settings are saved locally
12+
- **Auto Port Management** - Handles port conflicts automatically
13+
- **Fast Startup** - Application ready in ~1 second
14+
15+
### 📦 Downloads
16+
17+
Choose the right version for your operating system:
18+
19+
| Platform | Download | Size |
20+
|----------|----------|------|
21+
| 🪟 Windows 10/11 | [Backlogia-Windows.zip](./Backlogia-Windows.zip) | ~35 MB |
22+
| 🍎 macOS 10.15+ | [Backlogia-macOS.tar.gz](./Backlogia-macOS.tar.gz) | ~35 MB |
23+
| 🐧 Linux | [Backlogia-Linux.tar.gz](./Backlogia-Linux.tar.gz) | ~35 MB |
24+
25+
### 🚀 Installation
26+
27+
**Windows:**
28+
1. Download and extract `Backlogia-Windows.zip`
29+
2. Run `Backlogia.exe`
30+
3. If prompted, install [Microsoft Edge WebView2](https://go.microsoft.com/fwlink/p/?LinkId=2124703)
31+
32+
**macOS:**
33+
1. Download and extract `Backlogia-macOS.tar.gz`
34+
2. Right-click `Backlogia` and select "Open" (first time only)
35+
3. Application will start in a native window
36+
37+
**Linux:**
38+
1. Install WebKitGTK: `sudo apt install gir1.2-webkit2-4.0` (Ubuntu/Debian)
39+
2. Download and extract `Backlogia-Linux.tar.gz`
40+
3. Run `./Backlogia`
41+
42+
### 📝 System Requirements
43+
44+
- **Windows:** Windows 10 or later, Edge WebView2 Runtime
45+
- **macOS:** macOS 10.15 (Catalina) or later
46+
- **Linux:** Ubuntu 20.04+ / Fedora 35+ or equivalent, WebKitGTK 2.0
47+
48+
### 🔧 Technical Details
49+
50+
- Data stored in: `%APPDATA%\Backlogia` (Windows), `~/Library/Application Support/Backlogia` (macOS), `~/.config/backlogia` (Linux)
51+
- Logs available in: `<data-dir>/logs/`
52+
- Automatic port allocation (starts at 8000)
53+
- Built with PyWebView + PyInstaller
54+
55+
### 🐛 Known Issues
56+
57+
- None reported yet! Please [report issues](https://github.com/sam1am/backlogia/issues) if you encounter any.
58+
59+
### 📚 Documentation
60+
61+
- [README](https://github.com/sam1am/backlogia#readme)
62+
- [CHANGELOG](https://github.com/sam1am/backlogia/blob/main/CHANGELOG.md)
63+
64+
---
65+
66+
**Full Changelog**: https://github.com/sam1am/backlogia/compare/v0.1.0...v{VERSION}
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
name: Build Desktop Application
2+
3+
on:
4+
push:
5+
branches: [ deploy ]
6+
tags: [ 'v*' ]
7+
pull_request:
8+
branches: [ deploy ]
9+
workflow_dispatch:
10+
11+
jobs:
12+
build-windows:
13+
name: Build Windows
14+
runs-on: windows-latest
15+
16+
steps:
17+
- name: Checkout code
18+
uses: actions/checkout@v4
19+
20+
- name: Set up Python
21+
uses: actions/setup-python@v5
22+
with:
23+
python-version: '3.13'
24+
cache: 'pip'
25+
26+
- name: Install dependencies
27+
run: |
28+
python -m pip install --upgrade pip
29+
pip install -r requirements.txt
30+
pip install -r requirements-build.txt
31+
32+
- name: Generate icon
33+
run: python create_icon.py
34+
35+
- name: Build executable
36+
run: python build.py
37+
38+
- name: Create archive
39+
run: |
40+
cd dist
41+
Compress-Archive -Path Backlogia -DestinationPath Backlogia-Windows.zip
42+
43+
- name: Upload artifact
44+
uses: actions/upload-artifact@v4
45+
with:
46+
name: Backlogia-Windows
47+
path: dist/Backlogia-Windows.zip
48+
retention-days: 30
49+
50+
- name: Upload to release
51+
if: startsWith(github.ref, 'refs/tags/v')
52+
uses: softprops/action-gh-release@v1
53+
with:
54+
files: dist/Backlogia-Windows.zip
55+
draft: false
56+
prerelease: false
57+
env:
58+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59+
60+
build-macos:
61+
name: Build macOS
62+
runs-on: macos-latest
63+
64+
steps:
65+
- name: Checkout code
66+
uses: actions/checkout@v4
67+
68+
- name: Set up Python
69+
uses: actions/setup-python@v5
70+
with:
71+
python-version: '3.13'
72+
cache: 'pip'
73+
74+
- name: Install dependencies
75+
run: |
76+
python -m pip install --upgrade pip
77+
pip install -r requirements.txt
78+
pip install -r requirements-build.txt
79+
80+
- name: Generate icon
81+
run: python create_icon.py
82+
83+
- name: Build executable
84+
run: python build.py
85+
86+
- name: Create archive
87+
run: |
88+
cd dist
89+
tar -czf Backlogia-macOS.tar.gz Backlogia
90+
91+
- name: Upload artifact
92+
uses: actions/upload-artifact@v4
93+
with:
94+
name: Backlogia-macOS
95+
path: dist/Backlogia-macOS.tar.gz
96+
retention-days: 30
97+
98+
- name: Upload to release
99+
if: startsWith(github.ref, 'refs/tags/v')
100+
uses: softprops/action-gh-release@v1
101+
with:
102+
files: dist/Backlogia-macOS.tar.gz
103+
draft: false
104+
prerelease: false
105+
env:
106+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
107+
108+
build-linux:
109+
name: Build Linux
110+
runs-on: ubuntu-latest
111+
112+
steps:
113+
- name: Checkout code
114+
uses: actions/checkout@v4
115+
116+
- name: Set up Python
117+
uses: actions/setup-python@v5
118+
with:
119+
python-version: '3.13'
120+
cache: 'pip'
121+
122+
- name: Install system dependencies
123+
run: |
124+
sudo apt-get update
125+
sudo apt-get install -y \
126+
gir1.2-webkit2-4.0 \
127+
libgirepository1.0-dev \
128+
python3-gi \
129+
python3-gi-cairo
130+
131+
- name: Install Python dependencies
132+
run: |
133+
python -m pip install --upgrade pip
134+
pip install -r requirements.txt
135+
pip install -r requirements-build.txt
136+
137+
- name: Generate icon
138+
run: python create_icon.py
139+
140+
- name: Build executable
141+
run: python build.py
142+
143+
- name: Create archive
144+
run: |
145+
cd dist
146+
tar -czf Backlogia-Linux.tar.gz Backlogia
147+
148+
- name: Upload artifact
149+
uses: actions/upload-artifact@v4
150+
with:
151+
name: Backlogia-Linux
152+
path: dist/Backlogia-Linux.tar.gz
153+
retention-days: 30
154+
155+
- name: Upload to release
156+
if: startsWith(github.ref, 'refs/tags/v')
157+
uses: softprops/action-gh-release@v1
158+
with:
159+
files: dist/Backlogia-Linux.tar.gz
160+
draft: false
161+
prerelease: false
162+
env:
163+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/tests.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: Tests
2+
3+
on:
4+
push:
5+
branches: [ deploy ]
6+
pull_request:
7+
branches: [ deploy ]
8+
9+
jobs:
10+
test-python:
11+
name: Python Tests
12+
runs-on: ${{ matrix.os }}
13+
strategy:
14+
matrix:
15+
os: [ubuntu-latest, windows-latest, macos-latest]
16+
python-version: ['3.11', '3.12', '3.13']
17+
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v4
21+
22+
- name: Set up Python
23+
uses: actions/setup-python@v5
24+
with:
25+
python-version: ${{ matrix.python-version }}
26+
cache: 'pip'
27+
28+
- name: Install dependencies
29+
run: |
30+
python -m pip install --upgrade pip
31+
pip install -r requirements.txt
32+
33+
- name: Check imports
34+
run: |
35+
python -c "from web.main import app; print('✓ FastAPI app loads')"
36+
python -c "import desktop; print('✓ Desktop launcher loads')"
37+
38+
- name: Verify file structure
39+
run: |
40+
python -c "from pathlib import Path; assert (Path('web') / 'main.py').exists(); print('✓ File structure OK')"
41+
42+
lint:
43+
name: Code Quality
44+
runs-on: ubuntu-latest
45+
46+
steps:
47+
- name: Checkout code
48+
uses: actions/checkout@v4
49+
50+
- name: Set up Python
51+
uses: actions/setup-python@v5
52+
with:
53+
python-version: '3.13'
54+
55+
- name: Install dependencies
56+
run: |
57+
python -m pip install --upgrade pip
58+
pip install ruff
59+
60+
- name: Run Ruff
61+
run: |
62+
ruff check . --exit-zero
63+
echo "✓ Code quality check complete"

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ MANIFEST
3939
# Usually these files are written by a python script from a template
4040
# before PyInstaller builds the exe, so as to inject date/other infos into it.
4141
*.manifest
42-
*.spec
42+
# Keep our custom spec files
43+
!backlogia.spec
44+
!backlogia-debug.spec
4345

4446
# Installer logs
4547
pip-log.txt
@@ -221,5 +223,9 @@ marimo/_static/
221223
marimo/_lsp/
222224
__marimo__/
223225

226+
# Desktop app build artifacts
227+
icon.ico
228+
icon.png
229+
224230
# Streamlit
225231
.streamlit/secrets.toml

CHANGELOG.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Added
11+
- **Desktop Application Mode**: Backlogia can now run as a standalone desktop application
12+
- PyWebView-based native window wrapper for Windows, macOS, and Linux
13+
- Automatic server startup and port management
14+
- Elegant loading screen with animated gradient design
15+
- **Single instance lock** - Prevents multiple instances from running simultaneously
16+
- **System tray icon** - Optional tray menu for quick access (requires pystray)
17+
- Desktop executable packaging with PyInstaller
18+
- One-folder distribution with all dependencies bundled
19+
- Custom application icon
20+
- Windows GUI mode (no console window)
21+
- Persistent data storage in user directories (`%APPDATA%\Backlogia` on Windows)
22+
- Automated build script (`build.py`) for creating desktop executables
23+
- Loading screen route (`/loading`) for smooth app startup experience
24+
- Enhanced bookmarklet UI detection for desktop vs browser mode
1125
- **Predefined query filters system**: 18 quick filters organized in 4 categories for better library organization:
1226
- **Gameplay** (5 filters): Unplayed, Played, Started, Well-Played, Heavily-Played
1327
- **Ratings** (7 filters): Highly-Rated, Well-Rated, Below-Average, Unrated, Hidden Gems, Critic Favorites, Community Favorites
@@ -30,6 +44,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3044
- **Documentation**: Complete technical documentation in `.copilot-docs/` covering filter system architecture, SQL reference, and database schema
3145

3246
### Changed
47+
- Settings page now shows different bookmarklet instructions for desktop app users
48+
- Application data directory logic updated to support both dev and frozen (PyInstaller) modes
49+
- Log files now stored in `%APPDATA%\Backlogia\logs\` when running as desktop app
3350
- **Filter behavior**: Removed "Apply filters globally" checkbox—filters are now always global for simpler UX
3451
- **Filter application**: Auto-apply with 300ms debounce using event delegation for better reliability
3552
- **Random page**: Converted from redirect to full HTML page with game grid and filter integration
@@ -43,6 +60,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4360
- Recently Updated filter now works for all stores (uses `last_modified` field instead of Epic-specific `game_update_at`)
4461

4562
### Technical Details
63+
- Added `desktop.py` launcher with threading-based server management
64+
- Added PyInstaller configuration (`backlogia.spec`)
65+
- Added development dependencies: `pywebview`, `pyinstaller`
66+
- Server startup now waits for port availability before showing window
67+
- Loading screen served via FastAPI endpoint for better compatibility
4668
- **New files**:
4769
- `web/utils/filters.py`: Filter definitions (PREDEFINED_QUERIES, QUERY_DISPLAY_NAMES, QUERY_CATEGORIES, QUERY_DESCRIPTIONS)
4870
- `web/templates/_filter_bar.html`: Reusable filter bar component
@@ -59,3 +81,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
5981
- `.copilot-docs/database-schema.md`: Database schema documentation
6082
- **Modified routes**: `library.py`, `discover.py`, `collections.py`, `settings.py` to support `queries` parameter
6183
- **Database**: Added `popularity_cache` table and `ensure_predefined_query_indexes()` in `database.py`
84+
85+
## [0.1.0] - Previous Version
86+
87+
### Added
88+
- Initial release with web-based game library management
89+
- Support for multiple game stores (Steam, GOG, Epic, etc.)
90+
- IGDB integration for game metadata
91+
- Collections and custom organization
92+
- Bookmarklet for quick game additions

0 commit comments

Comments
 (0)