{"id":30348110,"url":"https://github.com/ankitk26/betterlist","last_synced_at":"2026-04-12T07:34:48.947Z","repository":{"id":309607461,"uuid":"976271040","full_name":"ankitk26/betterlist","owner":"ankitk26","description":"Manage your Spotify playlists efficiently","archived":false,"fork":false,"pushed_at":"2026-04-01T18:49:05.000Z","size":2371,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-12T07:34:26.909Z","etag":null,"topics":["better-auth","cloudflare-d1","cloudflare-d1-with-drizzle-orm","cloudflare-workers","shadcn-ui","tailwindcss","tanstack-query","tanstack-router","tanstack-start","zod"],"latest_commit_sha":null,"homepage":"https://betterlist.diffview.workers.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ankitk26.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-05-01T20:06:38.000Z","updated_at":"2026-04-01T18:49:09.000Z","dependencies_parsed_at":"2026-01-11T21:26:13.666Z","dependency_job_id":null,"html_url":"https://github.com/ankitk26/betterlist","commit_stats":null,"previous_names":["ankitk26/spotify-tanstack","ankitk26/cleanlist"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ankitk26/betterlist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitk26%2Fbetterlist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitk26%2Fbetterlist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitk26%2Fbetterlist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitk26%2Fbetterlist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ankitk26","download_url":"https://codeload.github.com/ankitk26/betterlist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitk26%2Fbetterlist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31707953,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T06:22:27.080Z","status":"ssl_error","status_checked_at":"2026-04-12T06:21:52.710Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["better-auth","cloudflare-d1","cloudflare-d1-with-drizzle-orm","cloudflare-workers","shadcn-ui","tailwindcss","tanstack-query","tanstack-router","tanstack-start","zod"],"created_at":"2025-08-18T17:37:39.270Z","updated_at":"2026-04-12T07:34:48.940Z","avatar_url":"https://github.com/ankitk26.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# betterlist\n\nbetterlist is a Spotify playlist management app built with TanStack Start.\n\n## Features\n\n### Playlist Management\n\n- Create, rename, and edit playlists\n- Add, remove, and bulk delete tracks\n- Remove duplicate tracks\n\n### Library \u0026 Discovery\n\n- Browse saved albums, artists, and liked songs\n- Search across all content\n- View artist discographies and album details\n\n### Music Insights\n\n- Personal listening stats (short, medium, and long-term)\n- Recently played tracks and top artists\n\n## Tech Stack\n\n**Frontend**\n\n- [TanStack Start](https://tanstack.com/start), [Router](https://tanstack.com/router), [Query](https://tanstack.com/query)\n- [React](https://react.dev/), [Tailwind CSS v4](https://tailwindcss.com/), [Shadcn/ui](https://ui.shadcn.com/)\n\n**Backend**\n\n- [Cloudflare Workers](https://workers.cloudflare.com/) - Edge computing platform\n- [Better Auth](https://www.better-auth.com/) - Authentication library\n- [Drizzle ORM](https://orm.drizzle.team/) - Database ORM\n- [Cloudflare D1](https://developers.cloudflare.com/d1/) - SQLite database\n- [Spotify Web API](https://developer.spotify.com/documentation/web-api) - Music data API\n\n## Installation\n\n### Prerequisites\n\n- Node.js 18+\n- [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/install-and-update/)\n- Cloudflare account\n- Spotify Developer account\n\n### Setup\n\n1. Clone the repository:\n\n   ```bash\n   git clone https://github.com/yourusername/betterlist.git\n   cd betterlist\n   ```\n\n2. Install dependencies:\n\n   ```bash\n   bun install\n   # or\n   npm install\n   ```\n\n3. Authenticate with Cloudflare:\n\n   ```bash\n   npx wrangler login\n   ```\n\n4. Create a D1 database:\n\n   ```bash\n   npx wrangler d1 create betterlist\n   ```\n\n5. Create a `.dev.vars` file in the root directory:\n\n   ```env\n   # Cloudflare (Required)\n   CLOUDFLARE_ACCOUNT_ID=your_cloudflare_account_id\n   CLOUDFLARE_DATABASE_ID=your_d1_database_id\n   CLOUDFLARE_D1_TOKEN=your_cloudflare_api_token\n\n   # Better Auth (Required)\n   BETTER_AUTH_SECRET=your_random_secret_key\n   BETTER_AUTH_URL=\u003cngrok_url\u003e\n\n   # Spotify OAuth (Required)\n   SPOTIFY_CLIENT_ID=your_spotify_client_id\n   SPOTIFY_CLIENT_SECRET=your_spotify_client_secret\n   ```\n\n6. Set up the database schema:\n\n   ```bash\n   npx drizzle-kit push\n   ```\n\n7. Start ngrok tunnel (in a separate terminal):\n\n   ```bash\n   ngrok http 3000\n   ```\n\n8. Run the development server:\n\n   ```bash\n   bun run dev\n   # or\n   npm run dev\n   ```\n\n9. Open your browser and navigate to your ngrok URL\n\n## Deployment\n\nDeploy to Cloudflare Workers:\n\n```bash\nbun run deploy\n# or\nnpm run deploy\n```\n\nThis builds the app and deploys it to Cloudflare Workers using the configuration in `wrangler.jsonc`.\n\n### Setup ngrok Tunnel\n\n1. Install [ngrok](https://ngrok.com/download) and authenticate it\n2. In a new terminal, create a tunnel:\n   ```bash\n   ngrok http 3000\n   ```\n3. Copy the HTTPS URL (e.g., `https://abc123.ngrok-free.app`)\n\n### Configure Spotify App\n\n1. Go to [Spotify Developer Dashboard](https://developer.spotify.com/dashboard)\n2. Select your app and click **Edit Settings**\n3. Add the following Redirect URI:\n   ```\n   https://\u003cYOUR_NGROK_URL\u003e/api/auth/callback/spotify\n   ```\n4. Save the changes\n\n## Scripts\n\n- `dev` - Start the development server\n- `build` - Build for production\n- `preview` - Preview the production build locally\n- `deploy` - Build and deploy to Cloudflare Workers\n- `cf-typegen` - Generate Cloudflare Workers types\n- `fmt` - Format code with oxfmt\n- `fmt:check` - Check code formatting\n\n## Support\n\nIssues: [GitHub Issues](https://github.com/yourusername/betterlist/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fankitk26%2Fbetterlist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fankitk26%2Fbetterlist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fankitk26%2Fbetterlist/lists"}