# OnePieceDle A One Piece themed daily guessing game inspired by Wordle. Guess the character of the day based on various hints that unlock after each wrong guess. ## Features - **Daily Character Challenge**: A new character to guess every 24 hours - **Progressive Hints**: Unlock hints after a certain number of guesses: - Origin (after 5 guesses) - Devil Fruit (after 10 guesses) - Affiliations (after 15 guesses) - **Character Comparison**: See how your guesses match up against the daily character with visual feedback - **History Tracking**: Keep track of your guesses and attempts - **Responsive Design**: Play on desktop or mobile with Tailwind CSS - **Database**: SQLite with Drizzle ORM for persistent data storage ## Tech Stack - **Frontend**: Svelte 5 with SvelteKit - **Styling**: Tailwind CSS with Forms and Typography plugins - **Backend**: Node.js with Better Auth for authentication - **Database**: SQLite with Drizzle ORM - **Scraping**: Cheerio for web scraping One Piece data - **Build**: Vite with TypeScript ## Getting Started ### Prerequisites - Node.js (see `.npmrc` for engine requirements) - npm or similar package manager ### Installation ```sh npm install ``` ### Environment Variables Create a `.env` file based on [.env.example](.env.example): ```env DATABASE_URL=file:local.db ORIGIN=http://localhost:5173 BETTER_AUTH_SECRET=your-secret-here ``` ### Development Start the development server: ```sh npm run dev ``` Open [http://localhost:5173](http://localhost:5173) in your browser. ### Database Initialize the database: ```sh npm run db:migrate ``` View the database: ```sh npm run db:studio ``` ### Data Management #### Import Character Data Scrape and import One Piece character data: ```sh npm run scrape npm run db:import ``` #### Set Daily Mode Characters Configure which characters appear in daily mode: ```sh # Edit scripts/daily-characters.json with desired character IDs npm run db:set-daily-mode ``` ## Project Structure ``` src/ ├── lib/ │ ├── server/ │ │ ├── db/ │ │ │ ├── schema.ts # Database schema │ │ │ └── index.ts # Database client │ │ ├── daily-character.ts # Daily character logic │ │ └── auth.ts # Authentication │ └── assets/ # Static assets ├── routes/ │ ├── +page.svelte # Home page │ ├── +page.server.ts # Home server logic │ ├── daily/ │ │ ├── +page.svelte # Daily game page │ │ ├── +page.server.ts # Daily game server logic │ │ └── +server.ts # API endpoints │ └── +layout.svelte # App layout scripts/ ├── scrape-onepiece.ts # Web scraper for One Piece data ├── import-json.ts # Import scraped data to database ├── set-daily-mode.ts # Configure daily mode characters └── daily-characters.json # List of daily mode character IDs scraped-data/ ├── characters.json # Scraped character data ├── arcs.json # Scraped arc data └── devil-fruits.json # Scraped devil fruit data ``` ## Building Create a production build: ```sh npm run build ``` Preview the production build: ```sh npm run preview ``` ## Code Quality ### Linting ```sh npm run lint ``` ### Formatting ```sh npm run format ``` ### Type Checking ```sh npm run check ``` Watch mode: ```sh npm run check:watch ``` ## Database Schema ### Main Tables - **character**: One Piece characters with stats (bounty, haki, devil fruit, etc.) - **arc**: Story arcs with chapter ranges - **devilFruit**: Devil fruits with types (Paramecia, Zoan, Logia) - **characterHistory**: Daily game attempts and wins - **characterScrapeValidation**: Validation data for scraped characters See [drizzle.config.ts](drizzle.config.ts) and [drizzle/0000_graceful_master_mold.sql](drizzle/0000_graceful_master_mold.sql) for details. ## Game Rules 1. You have unlimited guesses to find the daily character 2. Each guess shows you how close you are on various attributes: - **Green**: Exact match - **Yellow**: Partial match (e.g., both have Haki but different types) - **Red**: No match 3. Attributes displayed: Character, Status, Gender, Affiliations, Haki types, Bounty, Height, Origin, Arc, Devil Fruit type 4. Hints unlock progressively: - Origin: Always available - Devil Fruit: After 5 guesses - Affiliations: After 10 guesses ## API Endpoints - `POST /daily`: Submit a daily game result ## Contributing Feel free to fork and submit pull requests for new features or improvements. ## License This project is for educational purposes and fan use of the One Piece franchise.