mirror of
https://github.com/Tony0410/quietthanks.git
synced 2026-05-25 05:41:38 +08:00
A calm, private gratitude and mood log built with Next.js 16, TypeScript, Tailwind CSS, and SQLite/Drizzle ORM. Features: - Quick check-in with autosave (800ms debounce) - Optional mood selector (5 levels) with accessibility labels - Optional tags with tap-to-add from recent - Timeline with weekly reflection card - Filters by mood, tag, and rough day - Export to Markdown and JSON - Dark mode default - Delete with undo toast - Docker deployment ready Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
132 lines
3.0 KiB
Markdown
132 lines
3.0 KiB
Markdown
# Quiet Thanks
|
|
|
|
A calm, private gratitude and mood log. No streaks, no gamification—just a simple way to reflect on what you're grateful for.
|
|
|
|
## Features
|
|
|
|
- **Quick check-in**: One prompt, optional mood, optional tags. Entry capture takes 10-20 seconds.
|
|
- **Autosave**: No save button needed. Your entry saves automatically as you type.
|
|
- **Timeline**: View all entries in reverse chronological order with filters.
|
|
- **Weekly reflection**: See your entry count and top tags from the past 7 days.
|
|
- **Export**: Download all entries as Markdown or JSON.
|
|
- **Dark mode**: Calm, minimal interface with soft colors.
|
|
- **Self-hosted**: Your data stays on your server.
|
|
|
|
## Quick Start
|
|
|
|
### Docker (Recommended)
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
The app will be available at `http://localhost:6124`.
|
|
|
|
### Manual Setup
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
2. Generate and run database migrations:
|
|
```bash
|
|
npm run db:generate
|
|
npm run db:migrate
|
|
```
|
|
|
|
3. Start the development server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
4. Open `http://localhost:3000` in your browser.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Generate database migrations after schema changes
|
|
npm run db:generate
|
|
|
|
# Run migrations
|
|
npm run db:migrate
|
|
|
|
# Start dev server
|
|
npm run dev
|
|
|
|
# Build for production
|
|
npm run build
|
|
|
|
# Start production server
|
|
npm start
|
|
|
|
# View database with Drizzle Studio
|
|
npm run db:studio
|
|
```
|
|
|
|
## Database
|
|
|
|
- **Location**: `./data/quietthanks.db` (SQLite)
|
|
- **Environment variable**: `DATABASE_PATH` to customize location
|
|
- **Migrations**: Stored in `./drizzle/`
|
|
|
|
The database is created automatically when you run migrations. In Docker, the `./data` directory is mounted as a volume to persist data.
|
|
|
|
### Schema
|
|
|
|
- **entries**: Main gratitude entries with date, text, optional mood (1-5), rough day flag, and timestamps
|
|
- **tags**: Normalized tag names
|
|
- **entry_tags**: Junction table linking entries to tags
|
|
|
|
## Export
|
|
|
|
Navigate to `/export` or use the Export tab to download your data:
|
|
|
|
- **Markdown**: Human-readable format, grouped by date, includes mood and tags
|
|
- **JSON**: Full data export with all fields and timestamps
|
|
|
|
Exports include all entries regardless of filters.
|
|
|
|
## Configuration
|
|
|
|
### App Name
|
|
|
|
Change the app name by editing `src/lib/constants.ts`:
|
|
|
|
```typescript
|
|
export const APP_NAME = "My Gratitude Log";
|
|
```
|
|
|
|
### Port
|
|
|
|
In `docker-compose.yml`, change the port mapping:
|
|
|
|
```yaml
|
|
ports:
|
|
- "8080:3000" # Change 8080 to your desired port
|
|
```
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: Next.js 16 with App Router
|
|
- **Language**: TypeScript
|
|
- **Styling**: Tailwind CSS 4
|
|
- **Database**: SQLite with Drizzle ORM
|
|
- **Icons**: Lucide React
|
|
|
|
## Future Extension Points
|
|
|
|
These features are not implemented but the architecture supports them:
|
|
|
|
- **Cloud sync**: Add authentication and a sync service to enable cross-device access
|
|
- **LLM summaries**: Integrate with an LLM API to generate monthly reflections
|
|
- **Notifications**: Add push notifications for daily reminders
|
|
- **Import**: Add an import endpoint to restore from JSON exports
|
|
|
|
## License
|
|
|
|
MIT
|