{"id":32478293,"url":"https://github.com/karped1em/pickme","last_synced_at":"2026-05-05T01:37:56.437Z","repository":{"id":318828015,"uuid":"1076626291","full_name":"KARPED1EM/PickMe","owner":"KARPED1EM","description":"A lightweight desktop app for randomly picking students and managing cooldowns","archived":false,"fork":false,"pushed_at":"2025-10-24T12:18:03.000Z","size":348,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-24T12:24:53.941Z","etag":null,"topics":["flask","python","webview2"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/KARPED1EM.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-15T06:04:44.000Z","updated_at":"2025-10-24T12:18:04.000Z","dependencies_parsed_at":"2025-10-16T13:26:35.599Z","dependency_job_id":"8295b3cc-6a44-4688-a560-593c9239bae6","html_url":"https://github.com/KARPED1EM/PickMe","commit_stats":null,"previous_names":["karped1em/pickme"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/KARPED1EM/PickMe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KARPED1EM%2FPickMe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KARPED1EM%2FPickMe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KARPED1EM%2FPickMe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KARPED1EM%2FPickMe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KARPED1EM","download_url":"https://codeload.github.com/KARPED1EM/PickMe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KARPED1EM%2FPickMe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281191584,"owners_count":26458805,"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-10-26T02:00:06.575Z","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":["flask","python","webview2"],"created_at":"2025-10-26T23:57:37.907Z","updated_at":"2026-05-05T01:37:56.431Z","avatar_url":"https://github.com/KARPED1EM.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PickMe\n\nEnglish | [中文](README_zh.md)\n\nPickMe is a random name picker tool built with FastAPI and modern web frontend. It can run as a desktop application (using WebView2) or in server mode.\n\n## Features\n\n- 🎯 **Random Selection**: Pick individual students or groups with configurable cooldown periods to avoid frequent repetitions\n- 🗂️ **Classroom Management**: Create, switch, and delete classrooms with complete data isolation and drag-to-reorder support\n- 💾 **Unified Persistence**: Desktop mode writes a single JSON file per user; server mode keeps per-visitor UUID JSON files under the server data directory while the browser only caches the latest payload\n- 🪄 **User-Friendly Interface**: Context menus, cooldown queue, pick history, and more for easy interaction\n\n## Platform Support\n\n**Official Support**: Windows (x86, x64, ARM64)\n\n\u003e **Note**: This application officially targets Windows across multiple architectures. Linux and macOS have not been adapted, and compatibility is unknown.\n\n## Running the Application\n\n### 1. Desktop Mode (WebView2)\n\n```bash\npython scripts/desktop.pyw\n```\n\nOn first launch, data files will be created in `~/.pickme` (on Windows: `%USERPROFILE%\\.pickme`) and the WebView2 interface will open automatically. If WebView2 Runtime is not installed, the application will prompt you to download it from the Microsoft official website.\n\n### 2. Server / Development Mode\n\n```bash\npython -m scripts.serve --host 0.0.0.0 --port 8000\n```\n\nBy default, uses server storage mode where each visitor receives a UUID backed by a JSON file on the server (e.g. `\u003capp-data-dir\u003e/users/{uuid}.pickme.v2.json`). The browser keeps a short-lived cached payload locally for faster startup. Available parameters:\n\n| Parameter | Description |\n| ---- | ---- |\n| `--app-data-dir` | Directory used to store application data. |\n| `--reload` | Enable FastAPI hot reload for development |\n\nWindows users can also run `scripts\\serve.bat` for quick startup.\n\n## Classrooms \u0026 Data Storage\n\n- First run includes a default classroom **\"杭州黑马 AI Python 就业 3期\"** with sample student list for immediate testing.\n- **Desktop Mode**: All data is stored in `~/.pickme/local.pickme.v2.json` (on Windows: `%USERPROFILE%\\.pickme\\local.pickme.v2.json`), a single unified JSON file that contains preferences, runtime state, classes, and students.\n- **Server Mode**: Each visitor receives a UUID on first load; the backend stores the unified JSON at `~/.pickme/users/{uuid}.pickme.v2.json` (on Windows: `%USERPROFILE%\\.pickme\\users\\{uuid}.pickme.v2.json`). The browser keeps only a refreshed runtime cache (`pickme::uuid` and `pickme::data`) to stay in sync.\n- Each classroom keeps its student list, pick history, and cooldown state inside that unified file; updates persist automatically after every action.\n\n## Building Single-File EXE\n\n```bash\npyinstaller pickme.spec\n```\n\nThe generated executable will be located at `dist/PickMe.exe`. The GitHub Actions workflow `.github/workflows/build-and-release.yml` is configured to build for x86, x64, and ARM64 architectures.\n\n## Project Structure\n\n```txt\nscripts/desktop.pyw       # WebView2 wrapper entry point (desktop mode)\nscripts/serve.py          # FastAPI server startup script\napp/                      # FastAPI application, templates, and static resources\napp/metadata.py           # Application metadata\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarped1em%2Fpickme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkarped1em%2Fpickme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarped1em%2Fpickme/lists"}