{"id":30770362,"url":"https://github.com/aspenini/memory-pak","last_synced_at":"2026-05-12T21:37:19.785Z","repository":{"id":306202680,"uuid":"1023302384","full_name":"Aspenini/Memory-Pak","owner":"Aspenini","description":"A comprehensive console and game collection manager built with PyQt6","archived":false,"fork":false,"pushed_at":"2025-07-24T08:53:39.000Z","size":3528,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-24T10:05:46.869Z","etag":null,"topics":["application","collecting","collection","consoles","gamer","games","memory-pak","pyqt6","python","retro","tool","video-games","yaml"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Aspenini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-21T00:28:39.000Z","updated_at":"2025-07-24T08:53:43.000Z","dependencies_parsed_at":"2025-07-24T10:05:59.780Z","dependency_job_id":null,"html_url":"https://github.com/Aspenini/Memory-Pak","commit_stats":null,"previous_names":["aspenini/memory-pak"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Aspenini/Memory-Pak","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aspenini%2FMemory-Pak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aspenini%2FMemory-Pak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aspenini%2FMemory-Pak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aspenini%2FMemory-Pak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aspenini","download_url":"https://codeload.github.com/Aspenini/Memory-Pak/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aspenini%2FMemory-Pak/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273685604,"owners_count":25149722,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application","collecting","collection","consoles","gamer","games","memory-pak","pyqt6","python","retro","tool","video-games","yaml"],"created_at":"2025-09-04T23:04:06.800Z","updated_at":"2026-05-12T21:37:19.778Z","avatar_url":"https://github.com/Aspenini.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Memory Pak\n\n[![CI](https://github.com/Aspenini/Memory-Pak/actions/workflows/ci.yml/badge.svg)](https://github.com/Aspenini/Memory-Pak/actions/workflows/ci.yml)\n[![Deploy Website](https://github.com/Aspenini/Memory-Pak/actions/workflows/deploy.yml/badge.svg)](https://github.com/Aspenini/Memory-Pak/actions/workflows/deploy.yml)\n[![GitHub Release](https://img.shields.io/github/v/release/Aspenini/Memory-Pak?label=release)](https://github.com/Aspenini/Memory-Pak/releases/latest)\n[![GitHub Release Downloads](https://img.shields.io/github/downloads/Aspenini/Memory-Pak/total?label=release%20downloads)](https://github.com/Aspenini/Memory-Pak/releases)\n[![License](https://img.shields.io/github/license/Aspenini/Memory-Pak)](LICENSE)\n\nA cross-platform game collection tracker built with Rust, Tauri 2, Svelte, and WebAssembly. Memory Pak tracks consoles, games, and toy-to-life collectibles (LEGO Dimensions, Skylanders, and more) across owned, favorite, wishlist, and notes states.\n\n## Features\n\n- Desktop and mobile app shells through Tauri 2\n- Static web/PWA build using the same Svelte frontend and Rust core compiled to WASM\n- Embedded catalog precompiled at build time into a single binary blob (`postcard`)\n- Deterministic slug-based entry IDs (`game:nes/super-mario-bros`, `collectible:legodimensions/batman`, etc.)\n- Unified Collectibles tab spanning every toy-to-life line in `database/collectibles/`\n- Cross-console search, sorting, filtering, and virtualized long lists\n- JSON import/export at schema version `2.0`\n\n## Project Structure\n\n```text\nMemory-Pak/\n├── crates/\n│   ├── memory_pak_core/   # shared Rust data model, queries, state reducer, import/export\n│   └── memory_pak_wasm/   # wasm-bindgen adapter for the browser/PWA target\n├── frontend/              # Svelte 5 + TypeScript + Vite app\n├── src-tauri/             # Tauri 2 desktop/mobile shell and commands\n├── database/              # `consoles.json`, `games/*.json`, `collectibles/*.json`\n├── icons/                 # platform icons reused by Tauri and PWA\n└── site/                  # GitHub Pages landing page; deploy copies frontend/dist to site/app\n```\n\n## Requirements\n\n- Rust stable (pinned via `rust-toolchain.toml`)\n- Bun 1.3+\n- Tauri platform prerequisites for desktop/mobile builds (Xcode CLT on macOS, WebView2 on Windows, `webkit2gtk` etc. on Linux)\n\nInstall the rest of the tooling (`wasm-pack`, `tauri-cli`, the WASM target, and frontend deps) in one shot:\n\n```bash\nbun run install-tools\n```\n\n## Development\n\nAll commands are exposed as Bun scripts in the root `package.json`. Inspect that file to see every available script.\n\n```bash\nbun run test               # cargo test --workspace\nbun run check:wasm         # check WASM adapter against wasm32-unknown-unknown\nbun run frontend:dev       # Svelte/Vite PWA development server\nbun run frontend:build     # production PWA build\nbun run frontend:e2e       # Playwright end-to-end tests\nbun run tauri:dev          # Tauri desktop app\nbun run all-checks         # fmt + clippy + test + check:wasm + frontend test/build\n```\n\nIcons under `icons/web/` are the canonical PWA icon source. Vite serves them under `/icons/...` in dev and emits them to `dist/icons/...` at build time, so there is no separate copy to keep in sync.\n\nTauri mobile entrypoints are scaffolded through the standard Tauri CLI:\n\n```bash\nbun run android:init\nbun run android:dev\nbun run android:build\n\nbun run ios:init\nbun run ios:dev\nbun run ios:build\n```\n\n## User Data Storage\n\n- **Desktop / mobile**: a single `state.json` under the OS data directory (`ProjectDirs::data_dir()/state.json`), written atomically via a temp file + rename.\n- **Web / PWA**: a single IndexedDB record in the `memory-pak` database, written debounced to coalesce rapid toggles.\n\n## Export Format\n\n```json\n{\n  \"version\": \"2.0\",\n  \"exportedAt\": \"2024-01-01T00:00:00Z\",\n  \"entries\": [\n    {\n      \"id\": \"console:nes\",\n      \"owned\": true,\n      \"favorite\": false,\n      \"wishlist\": false,\n      \"notes\": \"My original NES\"\n    },\n    {\n      \"id\": \"game:nes/super-mario-bros\",\n      \"owned\": true,\n      \"favorite\": true,\n      \"wishlist\": false,\n      \"notes\": \"\"\n    }\n  ]\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faspenini%2Fmemory-pak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faspenini%2Fmemory-pak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faspenini%2Fmemory-pak/lists"}