{"id":47801044,"url":"https://github.com/urdadx/bundy-offline","last_synced_at":"2026-04-03T17:01:28.484Z","repository":{"id":345619828,"uuid":"1186639960","full_name":"urdadx/bundy-offline","owner":"urdadx","description":"An offline first wordsearch puzzle adventure game","archived":false,"fork":false,"pushed_at":"2026-03-20T10:26:06.000Z","size":35936,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-20T13:45:20.501Z","etag":null,"topics":["neon","offline-first","powersync"],"latest_commit_sha":null,"homepage":"https://bundylocal.urdadx.com","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/urdadx.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":null,"dco":null,"cla":null}},"created_at":"2026-03-19T20:54:06.000Z","updated_at":"2026-03-20T10:26:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/urdadx/bundy-offline","commit_stats":null,"previous_names":["urdadx/bundy-offline"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/urdadx/bundy-offline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urdadx%2Fbundy-offline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urdadx%2Fbundy-offline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urdadx%2Fbundy-offline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urdadx%2Fbundy-offline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/urdadx","download_url":"https://codeload.github.com/urdadx/bundy-offline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urdadx%2Fbundy-offline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31364578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["neon","offline-first","powersync"],"created_at":"2026-04-03T17:01:27.643Z","updated_at":"2026-04-03T17:01:28.463Z","avatar_url":"https://github.com/urdadx.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bundy\n\nAn educational word search puzzle adventure game. Explore different worlds, complete challenging levels, and learn interesting facts as you play. Play career mode or invite friends to play together in real-time.\n\n## Overview\n\nBundy is word search game designed with an \"offline-first\" philosophy. Players journey through themed worlds solving puzzles that get progressively more difficult. The game seamlessly syncs your progress across devices when online while remaining fully functional without an internet connection.\n\n### Key Features\n\n- **Themed Worlds**: Explore \"Meadow\", \"Relic\", \"Volcano\", \"Cyber\", \"Void\", and \"Malyka\", each with its own visual style and unique word sets.\n- **Career Mode**: Unlock new worlds by gaining XP and completing stages.\n- **AI-Powered Learning**: After every completed stage, the user can generate \"Fun Fact\" agent that provides unique, educational insights related to the current theme using the Mastra AI agent.\n- **Real-time Multiplayer**: Challenge friends to puzzle battles with synchronized moves and live health bars.\n- **Progress Sync**: Powered by PowerSync to ensure your stats, XP, and unlocks are never lost, even if you switch devices or go offline.\n\n## Offline-First Philosophy\n\nThis project is built to work anywhere, regardless of connectivity.\n\n- **Local-First Data**: All player data (XP, world progress, shop items, inventory) is stored in a local SQLite database within your browser (OPFS).\n- **PowerSync Integration**: We use PowerSync to maintain a real-time sync stream between the local database and our cloud Postgres (Neon). This allows for:\n  - Instant UI updates (no loading spinners for local data)\n  - Seamless offline play with background reconciliation\n  - Conflict-free multiplayer state management\n- **PWA Ready**: Optimized as a Progressive Web App for a native-like experience on mobile and desktop, including offline asset caching via service workers.\n\n## AI Integration with Mastra\n\nBundy leverages the **Mastra** framework to power its intelligent features:\n\n- **Fun Fact Agent**: Located in `apps/server/ai/index.ts`, this agent uses `gpt-4o-mini` to generate educational facts based on the current stage theme.\n\n\n## How to test\n- Create an account while online and complete a stage.\n- Visit all the pages to load the images and other assets\n- Turn off your internet, and refresh\n- You will be able to continue playing offline, no data loss\n- Your data will be synced automatically once you connect back to the internet\n  .\n\n## Built with\n\n- **TypeScript** - For type safety and improved developer experience\n- **TanStack Router** - File-based routing with full type safety\n- **TailwindCSS** - Utility-first CSS for rapid UI development\n- **PowerSync** - Real-time local-to-cloud sync for offline-first capabilities\n- **Mastra** - AI agent orchestration for dynamic fact generation\n- **Better Auth** - Secure, extensible authentication\n- **Hono** - Lightweight, performant server framework\n- **Bun** - High-speed runtime environment\n- **Drizzle** - TypeScript-first ORM for backend schema management\n- **Neon** - Serverless Postgres for the cloud-side storage\n\n## Getting Started\n\nFirst, install the dependencies:\n\n```bash\npnpm install\n```\n\n## Database Setup\n\nThis project uses Neon with Drizzle ORM.\n\n1. Make sure you have a Neon connection string  set up.\n2. Apply the schema to your database:\n\n```bash\npnpm run db:push\n```\n\nThen, run the development server:\n\n```bash\npnpm run dev\n```\n\nOpen [http://localhost:3001](http://localhost:3001) in your browser to see the web application.\nThe API is running at [http://localhost:3000](http://localhost:3000).\nThe web socket API is running at [http://localhost:3003](http://localhost:3003).\n\nFor better observability, I recommend you run each service seperately. Check the [Available Scripts](#available-scripts) section below for the necessary scripts.\n\n## Project Structure\n\n```\nbundy/\n├── apps/\n│   ├── web/         # Frontend application (React + TanStack Router)\n│   └── server/      # Backend API (Hono, TRPC, Bun)\n├── packages/\n│   ├── api/         # API layer / business logic\n│   └── db/          # Database schema \u0026 queries\n│   └── auth          # Authentication\n│   └── env          # Environment variables\n```\n\n## Available Scripts\n\n- `pnpm run dev`: Start all applications in development mode\n- `pnpm run build`: Build all applications\n- `pnpm run dev:web`: Start only the web application\n- `pnpm run dev:ws`: Start only the websocket application.\n- `pnpm run dev:server`: Start only the server\n- `pnpm run check-types`: Check TypeScript types across all apps\n- `pnpm run db:push`: Push schema changes to database\n- `pnpm run db:studio`: Open database studio UI\n- `pnpm run check`: Run Oxlint and Oxfmt\n\n### Deployment\n\nFor detailed deployment instructions—including Docker, Dokploy, and VPS setup—see the [DEPLOYMENT.md](./DEPLOYMENT.md) file.\n\nMore deployment platforms will be supported soon.\n\n## Contribution\n\nAll contributions are welcomed. Kindly open an issue or submit a PR request\n\n# bundy-offline\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furdadx%2Fbundy-offline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furdadx%2Fbundy-offline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furdadx%2Fbundy-offline/lists"}