docs: update README.md with detailed features, tech stack, and game rules
This commit is contained in:
191
README.md
191
README.md
@@ -1,42 +1,199 @@
|
||||
# sv
|
||||
# OnePieceDle
|
||||
|
||||
Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
|
||||
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.
|
||||
|
||||
## Creating a project
|
||||
## Features
|
||||
|
||||
If you're seeing this, you've probably already done this step. Congrats!
|
||||
- **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
|
||||
# create a new project
|
||||
npx sv create my-app
|
||||
npm install
|
||||
```
|
||||
|
||||
To recreate this project with the same configuration:
|
||||
### Environment Variables
|
||||
|
||||
```sh
|
||||
# recreate this project
|
||||
npx sv create --template minimal --types ts --add prettier eslint better-auth="demo:password" sveltekit-adapter="adapter:auto" tailwindcss="plugins:forms,typography" drizzle="database:sqlite+sqlite:libsql" --install npm onepiecedle
|
||||
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
|
||||
```
|
||||
|
||||
## Developing
|
||||
### Development
|
||||
|
||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||
Start the development server:
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```
|
||||
|
||||
# or start the server and open the app in a new browser tab
|
||||
npm run dev -- --open
|
||||
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
|
||||
|
||||
To create a production version of your app:
|
||||
Create a production build:
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
You can preview the production build with `npm run preview`.
|
||||
Preview the production build:
|
||||
|
||||
> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
|
||||
```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.
|
||||
Reference in New Issue
Block a user