# 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