{"id":44606543,"url":"https://github.com/dannymcc/casey","last_synced_at":"2026-02-14T11:01:17.130Z","repository":{"id":337679957,"uuid":"1153420147","full_name":"dannymcc/casey","owner":"dannymcc","description":"A calm, focused productivity app for daily journaling, lightweight task management, and idea resurfacing. Built with Flask and SQLite.","archived":false,"fork":false,"pushed_at":"2026-02-10T18:25:38.000Z","size":350,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-10T21:54:27.198Z","etag":null,"topics":["blips","docker","journal","python3","tasks"],"latest_commit_sha":null,"homepage":"https://casey.dmcc.io","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dannymcc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-02-09T09:27:18.000Z","updated_at":"2026-02-10T19:19:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dannymcc/casey","commit_stats":null,"previous_names":["dannymcc/casey"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/dannymcc/casey","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannymcc%2Fcasey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannymcc%2Fcasey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannymcc%2Fcasey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannymcc%2Fcasey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dannymcc","download_url":"https://codeload.github.com/dannymcc/casey/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannymcc%2Fcasey/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29443447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T10:51:12.367Z","status":"ssl_error","status_checked_at":"2026-02-14T10:50:52.088Z","response_time":53,"last_error":"SSL_read: 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":["blips","docker","journal","python3","tasks"],"created_at":"2026-02-14T11:00:26.344Z","updated_at":"2026-02-14T11:01:17.120Z","avatar_url":"https://github.com/dannymcc.png","language":"HTML","funding_links":["https://buymeacoffee.com/d3hkz6gwle"],"categories":[],"sub_categories":[],"readme":"# Casey\n\n[![\"Buy Me A Coffee\"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://buymeacoffee.com/d3hkz6gwle)\n\nA calm, focused productivity app for daily journaling, lightweight task management, and idea resurfacing. Built with Flask and SQLite.\n\n![Flask](https://img.shields.io/badge/Flask-Python-blue) ![GitHub Release](https://img.shields.io/github/v/release/dannymcc/casey) ![License](https://img.shields.io/badge/license-MIT-green) ![Docker](https://img.shields.io/badge/Docker-Ready-2496ED)\n\nNamed after [Casey Newton](https://www.theverge.com/authors/casey-newton), whose productivity approach on the [Hard Fork podcast](https://www.nytimes.com/column/hard-fork) inspired this tool.\n\n## Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/today.png\" alt=\"Today page\" width=\"80%\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Daily Journaling**: One entry per day with autosave, Markdown support, mood tracking, and tagging\n- **Journal Templates**: Customizable writing prompts (Morning Pages, Weekly Review, Daily Standup, Brain Dump) to get you started\n- **Task Management**: Due dates, priorities, subtasks, recurrence (daily/weekly/monthly), and completion history\n- **Blips**: Capture quick thoughts that randomly resurface each day using weighted spaced repetition, keeping good ideas alive\n- **Calendar View**: Monthly mood visualization with writing streak tracking\n- **Full-Text Search**: Search across journal entries, tasks, and blips\n- **Dark Mode**: Automatic theme detection with manual toggle\n- **Multi-User**: User registration, authentication, and per-user data isolation\n- **Two-Factor Auth**: TOTP-based 2FA with QR code setup\n- **API Access**: Personal API tokens with full REST endpoints for journal, tasks, and blips\n- **Import/Export**: JSON and CSV export, JSON import for backups and migration\n- **Admin Panel**: User management, audit logging, and usage statistics\n- **Docker Ready**: Single-container deployment with Gunicorn\n\n## How It Works\n\nThe blips system is the key differentiator. Unlike traditional note-taking where ideas get buried, Casey randomly surfaces old thoughts alongside your daily journal. The surfacing algorithm weights blips so that less-seen and older ideas come up more often, while pinned blips get a boost. This creates serendipitous connections and ensures good ideas don't die in your archive.\n\n**Daily workflow:**\n1. Open Casey in the morning\n2. See a few random blips from your backlog\n3. Journal freely (blips spark new connections)\n4. Add tasks as they come up\n5. Capture new blips throughout the day\n\n## Installation\n\n### Quick Start with Docker\n\n```bash\n# Create a directory for Casey\nmkdir casey \u0026\u0026 cd casey\n\n# Download docker-compose.yml\ncurl -O https://raw.githubusercontent.com/dannymcc/casey/master/docker-compose.yml\n\n# Create your environment file\ncp .env.example .env\n# Edit .env and set a strong SECRET_KEY\n\n# Start the container\ndocker compose up -d\n```\n\nOr run directly:\n\n```bash\ndocker run -d \\\n  --name casey \\\n  -p 5090:5090 \\\n  -v casey-data:/app/data \\\n  -e SECRET_KEY=your-secret-key \\\n  ghcr.io/dannymcc/casey:latest\n```\n\nAccess the application at `http://localhost:5090`\n\nThe first registered user is automatically promoted to admin.\n\n### Manual Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/dannymcc/casey.git\ncd casey\n\n# Create virtual environment\npython3 -m venv venv\nsource venv/bin/activate\n\n# Install dependencies\npip install -r requirements.txt\n\n# Run\npython app.py\n```\n\nVisit `http://localhost:5090`\n\n## Configuration\n\nCopy `.env.example` to `.env` and configure:\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `SECRET_KEY` | Session encryption key | Required |\n| `FLASK_DEBUG` | Enable debug mode | `False` |\n| `VERSION` | App version display | `dev` |\n\n## API\n\nCasey includes a REST API for automation and integrations. Generate a personal API token in Settings \u003e API.\n\n```bash\n# List journal entries\ncurl -H \"Authorization: Bearer your_api_token\" \\\n  http://localhost:5090/api/journal\n\n# Create a journal entry\ncurl -X POST -H \"Authorization: Bearer your_api_token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"date\": \"2026-02-10\", \"content\": \"Hello from the API\"}' \\\n  http://localhost:5090/api/journal/2026-02-10\n```\n\n### Available Endpoints\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | `/api/journal` | List journal entries |\n| GET/POST | `/api/journal/\u003cdate\u003e` | Get or create/update entry by date |\n| GET/POST | `/api/tasks` | List or create tasks |\n| GET/PUT/DELETE | `/api/tasks/\u003cid\u003e` | Get, update, or delete a task |\n| GET/POST | `/api/blips` | List or create blips |\n| GET/DELETE | `/api/blips/\u003cid\u003e` | Get or delete a blip |\n\n## Data Backup\n\nYour data lives in a single SQLite file at `data/casey.db` inside the container volume.\n\n**Using the built-in export:**\n- Go to Settings \u003e Data \u003e Export to download a full JSON or CSV backup\n\n**Manual backup:**\n```bash\ndocker cp casey:/app/data/casey.db ./backup-$(date +%Y-%m-%d).db\n```\n\n## Tech Stack\n\n- **Backend**: Python 3.11 / Flask\n- **Database**: SQLite with FTS5 full-text search\n- **Frontend**: Vanilla HTML/CSS/JS (no framework)\n- **Fonts**: DM Sans, JetBrains Mono (Google Fonts)\n- **Server**: Gunicorn\n- **Auth**: Flask-WTF CSRF, bcrypt passwords, TOTP 2FA\n- **Rate Limiting**: Flask-Limiter\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Development Setup\n\n1. Clone this repository\n2. Create a virtual environment: `python3 -m venv venv`\n3. Activate it: `source venv/bin/activate`\n4. Install dependencies: `pip install -r requirements.txt`\n5. Run in development mode: `python app.py`\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/dannymcc/casey/issues)\n\n---\n\n**Made by [Danny McClelland](https://github.com/dannymcc)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdannymcc%2Fcasey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdannymcc%2Fcasey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdannymcc%2Fcasey/lists"}